我有一个视图控制器 因为在自定义单元格中有一个表视图。
我在自定义单元格中有一个按钮
MyViewController
---View
------TableView
-------------Custom cell
-------------------UIButton
我想在自定义单元格类的自定义单元格中实现该按钮的按钮操作。
我想通过点击按钮来呈现另一个名为mailPage的viewcontoler
-(IBAction)webButtonClicked:(id)sender
{
[self presentModalViewController:mailpage animated:YES];
}
但是这里自我意味着CustomCell,甚至我尝试使用superview 我没有让我的视图控制器来代替自我
我试过这样但没用。
MyViewController *myViewController =self.superview
如何获取包含当前自定义单元格的View控制器
答案 0 :(得分:4)
我强烈建议您将视图控制器演示逻辑放在视图控制器中,而不是UITableViewCell
。
由于您已经在使用自定义单元格,因此这将非常简单。只需为自定义单元定义新协议,并让视图控制器充当委托。或者,根据this answer here,您可以完全放弃代理,只需让您的视图控制器充当按钮的目标。
您的自定义UITableViewCell
实际上不应该对它所显示的视图控制器有任何依赖性或了解。
答案 1 :(得分:2)
好的方法是为单元格中的按钮设置唯一标记,在cellForRowAtIndexpath方法中,您可以将按钮实例设为
UIButton *sampleButton=(UIButton *)[cell viewWithTag:3];
并将操作设置为
[sampleButton addTarget:self action:@selector(sampleButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
并在viewcontroller
中设置操作-(void)sampleButtonPressed:(id)sender
{
}
答案 2 :(得分:2)
试试这个:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"OpenHouseListCustomCell";
OpenHouseListCustomCell *cell = (OpenHouseListCustomCell *)[tblOpenHouses dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil) {
NSArray* nib = [[NSBundle mainBundle] loadNibNamed:@"OpenHouseListCustomCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
cell.showsReorderControl = NO;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.backgroundColor=[UIColor clearColor];
[cell.btn1 addTarget:self action:@selector(ButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
}
cell.btn1.tag = indexpath.row;
return cell;
}
-(void) ButtonClicked {
//your code here...
}