preprareForSegue:sender:永远不会在UITableViewController上调用

时间:2014-09-30 14:41:19

标签: ios objective-c uitableview uistoryboard uistoryboardsegue

我有简单的故事板项目,带有UITableViewController和详细VC。 Table View Controller有一个自定义类,它是表的委托和数据源。

我使用以下代码创建单元格:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellId = @"cellId";



    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
                                      reuseIdentifier:cellId];
    }
    // Configure the cell...


    return cell;
}

故事板中tableview的定义如下:

enter image description here

它显示正确,但是,当我点击一个单元格时,没有任何反应,并准备发送:发送者:永远不会被调用。

在故事板中,tableview单元格连接到详细信息VC:

enter image description here

我已经检查了类似的问题,但似乎没有任何内容适用于我的情况。 tableview的自定义类已设置,所有委托和数据源连接似乎都可以。

我对故事板很新,所以我担心错误必须在它的配置中。如果我实现didSelectRow ...我可以让系统按预期工作,但我想用segues来做。

2 个答案:

答案 0 :(得分:0)

将“{ctrl”从您的UITableViewCell拖放到所需的视图控制器。作为segue类型使用push并给segue一个标识符。然后你可以调用performSegue:segue并检查你的segue是否被

调用
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
      if ([segue.identifier isEqualToString:@"your identifier"]) {
         YourViewController *yourVC = (YourViewController*)segue.destinationViewController;
         // prepare your vc
      }
 }  

您也可以删除支票cell==nil,因为自iOS 6以来不再需要支票。

答案 1 :(得分:0)

只有当你在故事板中有一个连接或者你明确地调用了执行segue来调用执行segue时,才会调用segue的准备。

用于调用执行segue - Ctr +从你的uitableviewController拖动到detailviewController。为segue分配标识符。

在你的自定义课程中 - 方法tableView:didSelectRowAtIndexPath: - 调用方法performSegueWithIdentifier:并传递标识符。 还记得取消选择单元格。

此时,将调用塞格的准备。