【问题标题】:preprareForSegue:sender: is never called on a UITableViewControllerprepareForSegue:sender: 永远不会在 UITableViewController 上调用
【发布时间】:2014-11-25 05:52:33
【问题描述】:

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

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

- (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;
}

storyboard中tableview的定义如下:

它显示正确,但是,当我单击一个单元格时,什么也没有发生,并且 prepareforSegue:sender: 永远不会被调用。

在storyboard中,tableview cell连接到detail VC:

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

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

【问题讨论】:

  • 告诉我你已经使用 push segue 将你的 UITableViewController 与详细视图连接起来。
  • 那么 segue 应该在哪里调用? performForSegue: 在代码中?在 Storyboard 上,它在哪里连接?
  • 在您的故事板中单击单元格并创建您想要转入的任何ViewController 的转场。
  • 我确实将 tableViewCell 链接到 Storyboard 中的 detailViewController。我刚刚用这些额外信息更新了我的问题。

标签: ios objective-c uitableview uistoryboard uistoryboardsegue


【解决方案1】:

UITableViewCell 将“ctrl”拖放到所需的视图控制器。作为 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 开始不再需要。

【讨论】:

  • @cfisher 你已经删除了 cell==nil 检查吗?您可以删除整个 if 语句。
【解决方案2】:

Prepare for segue 仅在由于您在情节提要中的连接或您明确调用 perform segue 而调用 perform segue 时才调用。

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

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

此时会调用Segue的prepare。

【讨论】:

  • 我的故事板确实有联系。请查看更新后的问题。
  • 你尝试调用 performSegueWithIdentifier: 吗?
  • 我认为没有必要,在将单元与情节提要中的下一个 VC 连接后。
  • 您使用的是静态单元格还是动态原型?我相信这可能会产生差异。
猜你喜欢
  • 2012-08-03
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
  • 2021-04-15
  • 2014-11-01
  • 2016-07-22
  • 1970-01-01
相关资源
最近更新 更多