2012-04-21 239 views
8

我正在尝试做一些非常简单的操作:设置一个segue,以便当您单击表格中的某个单元格时,它将带您到另一个View Controller。我相信这个问题起源于这些单元格所在的TableView嵌入在常规ViewController中(而不是TableViewController)的事实,并且是此ViewController中的两个子视图之一。表格单元格不工作

据我所知,我已经正确设置了一切:我将ViewController与两个子视图一起嵌入到Navigation Contoller中,将其设置为TableView的dataSource和delegate,并创建了一个push segue一个TableViewCell到故事板中的第二个视图控制器。但是,当应用程序运行并且用户单击表中的某一行时,它仅仅选择该行并且该segue根本不会触发(我调试过它并且prepareForSegue函数甚至没有被调用)。

有什么我在这里失踪?或者,如果TableView不是其视图控制器中的唯一视图,那么出于某种原因,这是不可能的?

+0

你给了表格单元格的唯一标识符 – 2012-04-21 21:50:29

+0

我给在故事板(在原型单元格的属性中)和cellForRowAtIndexPath函数中标识“LoadCell”标识符;这是正确的,还是每个单独的单元格在创建时都应该被赋予一个独特的标识符? – generaltsow 2012-04-22 00:33:01

回答

2

如果要创建在Xcode故事板,然后进行以下操作:

  1. 创建一个UITableViewController
  2. 添加原型的UITableViewCell
  3. 创建的UIViewController,这将是你的目标赛格瑞。
  4. Control-单击原型UITableViewCell并拖动到segue目标。

就是这样。你可能想要编辑UITableViewCell的特性,例如,你的UITableViewCell的子类。

+2

这正是我所做的,除了不是有一个UITableViewController我有一个普通的UIViewController,UITableView(以及另一个UIView)作为主视图中的子视图。它仍然不起作用。 – generaltsow 2012-04-22 00:25:40

+0

在Xcode中,tableViewCell“推”故事板segue是否与您的segue目标控制器相关联? – GoZoner 2012-04-22 00:50:16

+0

当然可以。 – generaltsow 2012-04-22 00:57:01

4

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

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

+0

这解决了我的问题,但与发件人作为单元格:'发件人:[self.tableView cellForRowAtIndexPath:indexPath]' – brasskazoo 2013-12-01 05:48:55

4

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

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

然后确保你使用的是同一小区标识符作为在STE故事原型细胞中指定。

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

+0

花了过去两个小时试图弄清楚这一点(只是开始搞乱Objective-C今天晚上,非常感谢,这让我很生气! – 2014-04-18 23:59:48

+0

这就是答案,谢谢。 – 2014-09-02 19:00:51

4

我发现如果我最近连接了单元的附件视图中的segue,并且稍后删除了segue并尝试将新的segue直接连接到单元,它确实不会工作(使用Xcode 4.6.2) - - Xcode不断将segue连接到附件视图(即使没有一个)!我固定它的方式是通过选择IB中的单元格并使用连接检查器(1)删除原始的“辅助动作”segue,并(2)通过从下面的图像中的实心圆拖拽直接连接“选择”到适当的目标视图控制器。

enter image description here

+0

你是对的。这就是发生了什么。 – 2016-10-23 06:41:11

+0

仍然与Xcode 8相关:) 非常感谢。解决了我的问题 – gutte 2016-11-22 21:25:48

-1

有同样的问题。从常规视图控制器内部的原型表格视图单元中搜索会导致应用程序崩溃。如果有人有同样的问题。

我的解决办法:

如果您使用的是推赛格瑞确保与表视图您的第一个视图控制器嵌入导航控制器,否则“推塞格斯”不会工作。同时将segue指向目标View Controller,而不是其导航控制器!

如前所述,确保你的“segue标识符”是正确的。

在 “didSelectRowAtIndexPath方法” 我称之为 “[自我performSegueWithIdentifier:@” Your_destination_View_Controller”发件人:自我];

+0

添加performSegueWithIdentifier使我的应用程序崩溃,在 - [UITableViewCell _setHostsLayoutEngine:]中抛出Assertion失败。显然没有人有过/解决过这个问题,因为在这里没有答案。 – 2015-02-13 22:06:06

0

我有类似的问题 修复是 在故事板 2 SEGUE 1.写SegueIdentifier。添加以下行[自performSegueWithIdentifier:@“SegueIdentifier”发件人:无];?在didSelectRowAtIndexPath方法

我希望这将有助于

+0

为我工作。谢谢! – kalan 2014-07-02 08:28:08

+0

添加performSegueWithIdentifier会导致我的应用崩溃,并在 - [UITableViewCell _setHostsLayoutEngine:]中抛出Assertion失败。显然没有人有过/解决过这个问题,因为在这里没有答案。 – 2015-02-13 22:05:21

相关问题