【问题标题】:Table View Cell Segues not Working表格视图单元格 Segues 不起作用
【发布时间】:2012-04-21 21:31:21
【问题描述】:

我正在尝试做一些非常简单的事情:设置一个 segue,以便当您单击表格中的一个单元格时,它会将您带到另一个视图控制器。我认为,问题源于这些单元格所在的 TableView 嵌入在常规 ViewController(而不是 TableViewController)中,并且是该 ViewController 中的两个子视图之一。

据我所知,我已经正确设置了所有内容:我将 ViewController 与两个子视图嵌入到 Navigation Contoller 中,将其设置为 TableView 的数据源和委托,并从TableViewCell 到我在情节提要中的第二个视图控制器。但是,当应用程序运行并且用户单击表中的一行时,它只是选择了该行并且 segue 根本不会触发(我已经对其进行了调试,甚至没有调用 prepareForSegue 函数)。

这里有什么我遗漏的吗?或者如果 TableView 不是其视图控制器中的唯一视图,由于某种原因这是不可能的?

【问题讨论】:

  • 您是否为表格单元格指定了唯一标识符?
  • 我在情节提要(在原型单元格的属性中)和 cellForRowAtIndexPath 函数中都给单元格指定了标识符“LoadCell”;这是正确的,还是每个单独的单元格在创建时都应该有一个不同的标识符?

标签: objective-c xcode uitableview


【解决方案1】:

我发现如果我最近从单元格的附件视图连接了 segue,然后删除了 segue 并尝试直接将新的 segue 连接到单元格,它确实工作(使用 Xcode 4.6 .2) -- Xcode 不断将 segue 连接到附件视图(即使没有)!我修复它的方法是选择 IB 中的单元格并使用连接检查器 (1) 删除原始的“附件操作”segue 和 (2) 通过从下图中的实心圆圈中拖动来直接连接“选择”segue到适当的目标视图控制器。

【讨论】:

  • 仍然与 Xcode 8 相关 :) 非常感谢。解决了我的问题
  • 在 Xcode 13 中这对我来说仍然是一个问题。
【解决方案2】:

这可能对你有帮助也可能没有帮助,但我遇到了这个问题,因为我定义了两种不同的单元格类型,并提供了 didSelectRowAtIndexPath 实现。我必须将[self performSegueWithIdentifier:@"Whatever" sender:self] 添加为didSelectRowAtIndexPath 的一部分,问题得到解决。

如果您至少能够检测到行选择,则可以利用此方法。

【讨论】:

  • 这解决了我的问题,但发件人作为单元格:sender:[self.tableView cellForRowAtIndexPath:indexPath]
【解决方案3】:

如果您自定义了单元格渲染,例如:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

然后确保您使用的单元标识符与为 ste 故事中的原型单元指定的相同。

因此在这种情况下,连接 segue 的单元格的“标识符”应设置为“Cell”。

【讨论】:

  • 花了过去两个小时试图解决这个问题(今天晚上才刚刚开始使用 Objective-C。非常感谢,这让我发疯了!
【解决方案4】:

如果您在 Xcode 中创建 StoryBoard,请执行以下操作:

  1. 创建一个 UITableViewController
  2. 添加原型 UITableViewCell
  3. 创建将成为您的 segue 目标的 UIViewController。
  4. 按住 Control 并单击原型 UITableViewCell 并拖动到 segue 目标。

就是这样。例如,您可能希望将 UITableViewCell 的特征编辑为您的 UITableViewCell 的子类。

【讨论】:

  • 这正是我所做的,除了我没有使用 UITableViewController 而是使用常规 UIViewController,在主视图中使用 UITableView(以及另一个 UIView)作为子视图。还是不行。
  • 在 Xcode 中,tableViewCell 'push' storyboard segue 是否链接到作为您的 segue 目标的控制器?
【解决方案5】:

我有类似的问题。 修复是 1. 为 Storyboard 中的 segue 编写 SegueIdentifier 2.添加以下行[self performSegueWithIdentifier:@"SegueIdentifier" sender:nil];在 didSelectRowAtIndexPath 中。

我希望这会有所帮助。

【讨论】:

  • 为我工作。谢谢!
  • 添加 performSegueWithIdentifier 会使我的应用程序崩溃,在 -[UITableViewCell _setHostsLayoutEngine:] 中引发断言失败。显然之前没有人解决过这个问题,因为这里没有答案。
【解决方案6】:

遇到了同样的问题。从常规视图控制器中的原型表视图单元格中分离会使应用程序崩溃。万一有人有同样的问题。

我的解决方案:

如果您使用的是 push segue,请确保您的第一个带有 table view 的 View Controller 嵌入在 Navigation Controller 中,否则“push segues”将不起作用。还要将 segue 指向目标 View Controller,而不是其 Navigation Controller!

如前所述,请确保您的“转场标识符”正确。

在“didSelectRowAtIndexPath”我调用“[self performSegueWithIdentifier:@"Your_destination_View_Controller" sender:self];

【讨论】:

  • 添加 performSegueWithIdentifier 会使我的应用程序崩溃,在 -[UITableViewCell _setHostsLayoutEngine:] 中引发断言失败。显然之前没有人解决过这个问题,因为这里没有答案。
猜你喜欢
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多