子类UITut中的UIButton需要调用父类的方法

时间:2010-12-22 14:18:19

标签: iphone uitableview uibutton

道歉,如果已经有答案,但我找不到。

我有以下设置:MainViewController有一个很大的UITableView和CustomTableViewCell,它是UITableViewCell的子类。 CustomTableViewCell的每个实例都在其内容视图中添加了一个UIButton(所有这些都以编程方式完成)。

当在给定单元格中按下按钮时,我希望它在MainViewController中调用buttonPressed:方法,更好的是,告诉我包含按下按钮的单元格的indexPath.section。

CustomTableViewCell没有nib文件,都是以编程方式完成的。在CustomTableViewCell.h中,我声明:

    UIButton *mybutton;

虽然我没有保留(没有@property,@synthesize)。 CustomTableViewCell.m的init方法如下所示:

    myButton = [[UIButton alloc] init];
    [myButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventValueChanged];
    [[self contentView] addSubview:myButton];
    [myButton release];

但是我想调用住在父视图中的“buttonPressed:”方法。一直在偷偷摸摸几个小时,所以如果有人能饶恕我自己的愚蠢,我将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:16)

然后你去代理模式!

定义控制器将遵守的协议以及您的单元格上的类型id的委托。不要忘记为您使用控制器创建的每个单元格分配该委托。

协议:

@protocol MyProtocol
-(void)customCell:(MyCustomCell*)cell buttonClicked:(id)button;
@end

您的手机界面中的属性:

@interface MyCustomCell : UITableViewCell ...
...
   id<MyProtocol> _delegate;
...
   @property (nonatomic, assign) id<MyProtocol> delegate;
...
@end

使用以下命令合成您的属性:

@synthesize delegate = _delegate;

在你的控制器中实现delagate:

@interface MyCustomContoller : UIViewController<MyProtocol>

在创建单元格时(从控制器)设置委托

cell.delegate = self

然后单击按钮时从单元格中调用的方法:

-(void) buttonClicked:(id)sender {
[self.delegate customCell:self buttonClicked:sender];
}