从 UITableViewCell 呈现 UIViewController:addChildViewController 无法识别的选择器发送到实例

Posted

技术标签:

【中文标题】从 UITableViewCell 呈现 UIViewController:addChildViewController 无法识别的选择器发送到实例【英文标题】:Presenting UIViewController from UITableViewCell: addChildViewController unrecognized selector sent to instance 【发布时间】:2015-03-19 11:33:51 【问题描述】:

我正在尝试使用 SCLAlertView 库在您单击表格视图单元格中的按钮时显示警报视图。我从我的 tableviewcell.m 中这样呈现它:

- (IBAction)showSuccess:(id)sender 
    SCLAlertView *alert = [[SCLAlertView alloc] init];

    [alert addButton:@"First Button" target:self selector:@selector(firstButton)];

    [alert addButton:@"Second Button" actionBlock:^(void) 
        NSLog(@"Second button tapped");
    ];

    [alert showSuccess:self title:@"test" subTitle:@"test" closeButtonTitle:@"test" duration:0.0f];

但是当我点击按钮时,应用程序崩溃并给我这个错误:

[TableViewCell addChildViewController:]: unrecognized selector sent to instance 0x126e1bc90

它还在我实际显示警报的行上给了我这个警告:

Incompatible pointer types sending 'TableViewCell *' to parameter of type 'UIViewController *'

我猜我无法从表格视图单元格中显示视图控制器,但我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您必须将单元格的父视图控制器添加为 childViewController。

因此,在单元格中添加一个委托,将其附加到 TableViewController 中,然后在从单元格委托触发时从 TableViewController 调用警报。

【讨论】:

无法让它工作。这是我现在的做法:首先我在表格视图单元格文件中创建一个委托协议,其中包含:-(void)showAlertView;,然后,在父视图控制器中,我将委托添加到 .h 文件中,在 .m 文件中,我为警报视图编写了实际代码。然后我回到表格视图单元 .m 文件,那么 showAlertView 方法应该只是:[_delegate showAlertView];。对?还是我做错了什么? 在填充tableview时是否将delegate设置为单元格? cell.delegate = self in cellForRowAtIndexPath ?

以上是关于从 UITableViewCell 呈现 UIViewController:addChildViewController 无法识别的选择器发送到实例的主要内容,如果未能解决你的问题,请参考以下文章

从 UITableViewCell 呈现 UIViewController:addChildViewController 无法识别的选择器发送到实例

UITableViewCell 子类,错误的高度直到滚动

在呈现的视图控制器上的 UITableViewCell 中呈现 UIAlertController

如何从 UITableViewCell 获取当前位置(帧)?

UITableViewCell 在首次加载时无法正确呈现

在代码中自动调整 UIImageView