如何获取包含在其中的自定义单元格的UIView控制器

时间:2013-07-08 11:49:14

标签: ios objective-c uitableview uiviewcontroller custom-cell

我有一个视图控制器 因为在自定义单元格中有一个表视图。

我在自定义单元格中有一个按钮

MyViewController
---View
------TableView
-------------Custom cell
-------------------UIButton

我想在自定义单元格类的自定义单元格中实现该按钮的按钮操作。

我想通过点击按钮来呈现另一个名为mailPage的viewcontoler

-(IBAction)webButtonClicked:(id)sender
{
  [self presentModalViewController:mailpage animated:YES];
}

但是这里自我意味着CustomCell,甚至我尝试使用superview 我没有让我的视图控制器来代替自我

我试过这样但没用。

MyViewController *myViewController =self.superview 

如何获取包含当前自定义单元格的View控制器

3 个答案:

答案 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...
}