9

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

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

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

4

6 回答 6

5

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

在此处输入图像描述

于 2013-05-22T05:35:26.170 回答
4

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

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

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

于 2013-04-07T20:06:00.113 回答
4

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

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

于 2012-09-17T00:29:02.887 回答
2

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

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

而已。例如,您可能希望将 UITableViewCell 的特征编辑为您的 UITableViewCell 的子类。

于 2012-04-21T21:50:13.727 回答
0

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

我希望这会有所帮助。

于 2014-05-01T17:24:33.643 回答
-1

Had the same problem. Segue from a prototype table view cell inside a regular View Controller would make the app crash. In case someone have the same problem.

My solution:

If you are using a push segue make sure your first View Controller with the table view is embedded in a Navigation Controller otherwise "push segues" wont work. Also point the segue at the destination View Controller, not its Navigation Controller!

And as mentioned earlier, make sure your "segue identifiers" are correct.

at "didSelectRowAtIndexPath" I call "[self performSegueWithIdentifier:@"Your_destination_View_Controller" sender:self];

于 2014-04-07T09:18:36.787 回答