我有自定义单元格UITableView
。在单元格中,我有viewController
中的按钮和方法(包含UITableView
)
我的按钮点击实现位于我的myCustomCell
课程内。
问题是 - 从viewController
调用myCustomCell
方法的最简单方法是什么?
我想到了代表和NSNotificationCenter。但也许还有另一种方式。
修改
答案 0 :(得分:4)
在myCustomCell.h中添加以下行
@protocol ButtonTapDelegate
- (void) buttonDidTap:(UIButton*) button;
@end
@property (nonatomic, weak) NSObject<ButtonTapDelegate> *vs_delegate;
-(void) buttonIsPressed;
@synthesize vs_delegate;
-(void) buttonIsPressed:(UIButton*)button {
if([delegate conformsToProtocol:@protocol(ButtonTapDelegate)] && [delegate respondsToSelector:@selector(buttonDidTap:)]) {
[vs_delegate buttonDidTap:button];
}
}
在viewController.h中
myViewController : UIViewController <ButtonTapDelegate>
在viewController.m中,在Method
中- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
[cell set.Vs_delegate:self];
[cell.button setTag:indexPath.row];
[cell.button addTarget:self action:@selector(buttonIsPressed) forControlEvents:UIControlEventTouchUpInside];
[cell.button buttonIsPressed:indexPath.row];
将以下方法放在ViewController.m
中- (void) buttonDidTap:(UIButton*) button {
// You have index, by Button's tag.
}
答案 1 :(得分:1)
使用块执行此操作的最有效和最简洁的方法。
在您的单元格中声明阻止属性 TableViewCell 或 CollectionViewCell 。
@property (nonatomic, copy) void(^buttonClickedAtIndexPath)(NSIndexPath *indexPath);
在单元格本身中声明按钮的操作,并在按钮单击事件中调用上面的块。
-(IBAction)buttonClicked:(id)sender {
// get indexPath here, which will be indexPath of cell.
// you need to set button's tag as indexPath.row
if(self.buttonClickedAtIndexPath) {
self.buttonClickedAtIndexPath (indexPath);
}
}
在ViewController中
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
TableViewCell *cell = // configure cell here.
cell.button.tag = indexPath.row;
cell.buttonClickedAtIndexPath = ^(NSIndexPath *indexPath){
// you can do anything here.
// Call any method using self OR
// perform segue
}
}
如果你在TableViewCell中有CollectionView,那么同样适用。
=============================================== =============
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
TableViewCell *cell = // configure cell here.
cell.mycollectionView.buttonClickedAtIndexPath = ^(NSIndexPath *indexPath){
// you can do anything here.
// Call any method using self OR
// perform segue
}
}