Xcode 4.2 iOS 5:UITableView中的多个segue

10

我现在正在使用适用于iOS5的Xcode 4.2开始工作,有一些变化,但我现在遇到了一个无法解决的问题。

我正在使用UITablwView进行示例,该表格是以编程方式填充的,共有2个部分,第1个部分只有1行,第2个部分有3行。

我的目标是从表格中选择一行,并基于该行将用户重定向到不同的视图。

例如:选择第0个部分的第0行,应用程序将推送到视图1 - 名称设置//选择第1个部分的第0行,应用程序将推送到视图3 - 地址设置

按照旧的方式,这很简单,只需要使用initWithNibName初始化UIViewController,然后推送视图。

现在使用storyBoard的一切都改变了,或者至少我认为它改变了,因为我无法通过从tableView设置多个segue到不同的UIViewControllers来获得相同的结果...而且要按照旧的方式做,我看不到从storyBoard上获取视图的NIB名称以初始化一个UIViewController来推送的位置。

有谁知道如何实现此结果吗?

3个回答

25

在故事板中,从源视图控制器定义两个“通用” segue(例如标识为“segue1”和“segue2”),分别连接到每个目标视图控制器。这些 segue 不会与任何操作相关联。

然后,在您的 UITableViewDelegate 中有条件地执行这些 segue:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Conditionally perform segues, here is an example:
    if (indexPath.row == 0)
    {
        [self performSegueWithIdentifier:@"segue1" sender:self];
    }
    else
    {
        [self performSegueWithIdentifier:@"segue2" sender:self];
    }
}

2
太棒了,我也试过了。应该被接受为答案。 - mm24

16
我和你有同样的问题。问题在于你不能将你的tableViewCell链接到多个视图控制器。但是,你可以将源视图本身链接到多个视图控制器。
  1. 从场景查看器中将主视图控制器(而不是表视图单元格)与你想要链接的任何视图控制器进行控制拖动。你可以随意这样做。注意,在源视图控制器场景中显示的转场应该类似于“从根视图控制器推送转场…”而不是“从NavCell推送转场到...”。

  2. 为每个转场链接指定一个唯一名称,例如“toDetailView1”。

  3. 最后,在源视图控制器中自定义选择:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        if (indexPath.row % 2 == 1) {
            [self performSegueWithIdentifier:@"toDetailView1" sender:self];
        } else {
            [self performSegueWithIdentifier:@"toDetailView2" sender:self];
        }
    }
    

太棒了!解决了我的问题!有一个问题...如果我有超过两个segue要使用同样的东西,该怎么办呢?比如说我有7个tableView单元格。除了你提供的代码之外,我该怎么用它? - Steve Sahayadarlin

0

像 @陳仁乾 和 @Marco 解释的完全正确。为了让一切变得更容易,我建议您使用一个单独的 NSArray,它将在 viewDidLoad 初始化。只需将 segues 命名与您的 UIViewControllers 相同,这样您就可以显示出您可以选择哪些 UIViewControllers 的正确描述,并且您还可以从此 NSArray 执行 segues

(实际上,我不确定将 segue 命名为您要调用的 UIViewController 是否会导致任何问题。如果这是 BadPractise,请告诉我)

viewDidLoad

- (void)viewDidLoad
{
    [super viewDidLoad];

    _arraySessions = [[NSArray alloc] initWithObjects:
                      @"MyViewControllerName", nil];
}

cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = 
     [tableView dequeueReusableCellWithIdentifier:@"overviewCell"
                                     forIndexPath:indexPath];

    [cell.textLabel setText:_arraySessions[indexPath.row]];

    return cell;
}

didSelectRowAtIndexPath

- (void)tableView:(UITableView *)tableView 
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [self performSegueWithIdentifier:_arraySessions[indexPath.row] 
                              sender:self];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接