objective-c accessing methods from custom cell

后端 未结 4 1296
广开言路
广开言路 2021-01-19 23:56

ok, this is maybe a newbie question but i need help with it.. I have a someview.m and in it a custom cell which is defined in customCell.h and .m So in someview.m i have

相关标签:
4条回答
  • 2021-01-20 00:36

    if the textField is in your custom cell, you can handle the textField... events in the customCell.m too.

    if you do so, you can call the methode simply with [self printStuff]; in

    - (BOOL)textFieldShouldReturn:(UITextField *)textField

    //CustomCell.h
    // ...
    @interface CustomCell : UITableViewCell <UITextFieldDelegate>
    {
        //...
    }
    
    -(void)printStuff;
    
    @end
    
    //CustomCell.m
    
    //...
    
    -(void)printStuff
    {
        //...
    }
    
    -(BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        //...
        [textField resignFirstResponder];
    
        [self printStuff];
    
        return YES;
    }
    

    or if the printStuff methode is in you tableView class, you can declare a protocol

    // CustomCell.h
    @protocol CustomCellProtocol <NSObject>
    
    -(void)printStuff:(NSString *)stuff;
    
    @end
    
    @interface CustomCell UITableViewCell <UITextFieldDelegate>
    
    @property (nonatomic, assign)UIViewController<CustomCellProtocol> *parent;
    
    // CustomCell.m
    -(void)printStuff:(NSString *)stuff
    {
        [parent printStuff:stuff];
    }
    
    
    // TableViewClass.h
    ...
    @interface TableViewClass : UITableViewController<CustomCellProtocol>
    
    
    // TableViewClass.m
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        customCell *cell=[tableView dequeueReusableCellWithIdentifier:@"charCell"];
        if (cell == nil || (![cell isKindOfClass: customCell.class]))
        {
            cell=[[customCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"charCell"];
            cell.parent = self; // or with a custom setter methode
        }
        return cell;
    }
    
    0 讨论(0)
  • 2021-01-20 00:45

    Make your UITableView global

    And in -(BOOL)textFieldShouldReturn:(UITextField *)textField

    add something like:

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:TheIndexPath];
    [cell printStuff];
    
    0 讨论(0)
  • 2021-01-20 00:50

    You need to use delegate. Custom cell init method will take delegate of someview. To textFeild in CustomCell set this delegate. Something link this In CustomCell.h have a class variable

    {
    UIViewController *target;
    }
     - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier withtarget:(UIViewController *)_target;
    

    In CustomCell.m

    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier withtarget:(UIViewController *)_target
    {
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
        if (self) {
            // Initialization code 
             target = _target;
    }
    

    // You can now use this call [target printStuff];

    In someView.m cellForRow method call this init method to initialise cell.

    cell = [[[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier withtarget:self ];
    
    0 讨论(0)
  • 2021-01-20 00:55

    Take 1 variable in customCell.h like

    @property (nonatomic,strong) UIView *parent; //Assuming someview is UIView, if it is UIViewController than change UIView to id
    

    now in following method

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath     *)indexPath
    {
        customCell *cell=[tableView dequeueReusableCellWithIdentifier:@"charCell"];
    if (cell == nil || (![cell isKindOfClass: customCell.class]))
    {
        cell=[[customCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"charCell"];
    }
    cell.parent = self;
    return cell;
    }
    

    now in

    -(BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        [_parent printStuff]; //Call like this.
        return YES;
    }
    

    Hope this helps, Let me know in case of any query.

    0 讨论(0)
提交回复
热议问题