4

好的,这可能是一个新手问题,但我需要帮助。我有一个 someview.m,其中有一个自定义单元格,它在 customCell.h 和 .m 中定义所以在 someview.mi

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

我也有方法

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

现在自定义单元格工作正常,但我需要访问 printStuff 方法

- (BOOL)textFieldShouldReturn:(UITextField *)textField

在 customCell.m 中我尝试过类似的东西,[[self super] printStuff]但我总是遇到错误......我希望我正确解释了这个问题

4

4 回答 4

2

如果 textField 在您的自定义单元格中,您也可以处理 textField... 事件customCell.m

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

或者如果 printStuff 方法在你的 tableView 类中,你可以声明一个协议

// 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;
}
于 2013-05-16T10:32:08.913 回答
1

customCell.h在like中取1个变量

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

现在采用以下方法

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

现在在

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

希望这会有所帮助,如果有任何疑问,请告诉我。

于 2013-05-16T10:48:26.830 回答
0

您需要使用委托。自定义单元格初始化方法将接受 someview 的委托。为 CustomCell 中的 textFeild 设置此委托。在CustomCell.h中有一个类变量

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

在 CustomCell.m 中

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

// 你现在可以使用这个调用 [target printStuff];

在 someView.m cellForRow 方法中调用这个 init 方法来初始化单元格。

cell = [[[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier withtarget:self ];
于 2013-05-16T10:33:19.860 回答
0

让您的UITableView全球化

而在-(BOOL)textFieldShouldReturn:(UITextField *)textField

添加类似的内容:

UITableViewCell *cell = [tableView cellForRowAtIndexPath:TheIndexPath];
[cell printStuff];
于 2013-05-16T10:42:05.847 回答