我有一个自定义uitableviewcell
和subclassed
,它包含一个uitextfield
,delegate
也已设置,现在按下键盘上的return key
时我想尝试一些事情
如果我获得rootviewcontroller引用,则rootviewcontroller的视图本身不会显示或不显示活动视图,因此您执行的任何操作都不会显示在屏幕上,因此需要活动视图。
答案 0 :(得分:2)
您可以在单元格上使用块属性,只要发生自定义按钮操作,就会触发该属性。您的单元格的块属性可能如下所示:
@interface CustomTableViewCell : UITableViewCell
@property (nonatomic, copy) void (^customActionBlock)();
@end
然后,您的单元格将从自定义按钮操作中调用此块,如下所示:
@implementation CustomTableViewCell
- (IBAction)buttonTapped:(id)sender {
if ( self.customActionBlock ) {
self.customActionBlock();
}
}
@end
最后,您将-cellForRowAtIndexPath:
中的块设置回视图控制器(或任何位置),如下所示:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
CustomTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"customCell" forIndexPath:indexPath];
cell.textLabel.text = [self.colors objectAtIndex:indexPath.row];
cell.customActionBlock = ^{
NSLog(@"Do the stuff!");
// present view controller modally
// present an action sheet
// etc....
};
return cell;
}
但是,有一点需要注意。如果使用块,则存在强烈引用self
并创建内存泄漏的风险。块很有趣且易于使用,但你必须遵守他们的规则。以下是一些可以帮助您熟悉它们的资源:
答案 1 :(得分:1)
您可以将操作添加到按钮,即使它们位于tableView
[cell.button addTarget:self action:@selector(presentController:) forControlEvents:UIControlEventTouchUpInside];
presentController
指的是IBAction
- (IBAction)presentController:(id)sender
{
//present
}
答案 2 :(得分:1)
在Tableview SuperClass中实现按钮操作。 或者您可以在UITableViewCell子类中使用自定义委托。在UITableView子类中声明一个协议。
@protocol customCellDelegate <NSObject>
@required
-(void)selectedButtonInIndexPath : (NSIndexPath *)indexpath;
@end
在UITableView子类
中设置此属性@property (nonatomic, strong)NSIndexPath *indexpath;
@property (nonatomic, strong) id <customCellDelegate> delegate;
然后在您的UITableView子类按钮操作中添加此行
if(self.delegate){
[self.delegate selectedButtonInIndexPath: self.indexpath];
}
在tableview数据源方法
中- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
实施此代码
cell.delegate = (id)self;
cell.indexpath = indexPath;
在Uitableview超级类中只需实现此方法
-(void)selectedButtonInIndexPath : (NSIndexPath *)indexpath{
//display uiimagepickercontroller modally or anything else here
}