表视图单元格段不起作用

时间:2012-04-21 21:31:22

标签: objective-c xcode uitableview

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

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

这里有什么我想念的吗?或者,如果TableView不是其视图控制器中的唯一视图,那么这是不可能的?

6 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:4)

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

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

然后确保您使用的是与故事中原型单元格相同的单元格标识符。

因此,在这种情况下,连接segue的单元格的'Identifier'应设置为' Cell '。

答案 2 :(得分:4)

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

enter image description here

答案 3 :(得分:2)

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

  1. 创建UITableViewController
  2. 添加原型UITableViewCell
  3. 创建将成为你的segue目标的UIViewController。
  4. 控制 - 单击原型UITableViewCell并拖动到segue目标。
  5. 就是这样。您可能希望编辑UITableViewCell的特性,例如,您的UITableViewCell的子类。

答案 4 :(得分:0)

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

我希望这会有所帮助。

答案 5 :(得分:-1)

有同样的问题。从常规View Controller中的原型表视图单元中查看将导致应用程序崩溃。万一有人有同样的问题。

我的解决方案:

如果您正在使用推送segue,请确保您的第一个带有表视图的View Controller嵌入在导航控制器中,否则"推送segues"不会工作。还要将segue指向目标View Controller,而不是其导航控制器!

如前所述,请确保您的" segue标识符"是对的。

at" didSelectRowAtIndexPath"我打电话给#34; [self performSegueWithIdentifier:@" Your_destination_View_Controller"发件人:自];