objective-c accessing methods from custom cell

大城市里の小女人 提交于 2019-12-01 21:26:44

问题


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

- (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"];
}
return cell;
}

i have a method too

-(void) printStuff
{
   NSLog(@"stuff");
}

Now the custom cells are working fine, but i need to access the method printStuff from

- (BOOL)textFieldShouldReturn:(UITextField *)textField

which is in customCell.m i have tried stuff like [[self super] printStuff] but i always get an error... I hope i explained the problem correctly


回答1:


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;
}



回答2:


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.




回答3:


Make your UITableView global

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

add something like:

UITableViewCell *cell = [tableView cellForRowAtIndexPath:TheIndexPath];
[cell printStuff];



回答4:


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 ];


来源:https://stackoverflow.com/questions/16584930/objective-c-accessing-methods-from-custom-cell

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!