2012-01-10 80 views
10

我在Xcode现在开始对4.2的iOS5和有一些变化,现在我穿越,我不能想出一个办法来解决它的问题多塞格斯。的Xcode 4.2的iOS 5:从一个UITableView

我正在做一个UITablwView的例子,它以编程方式填充2个部分,第1个部分只有1个行,第2个部分有3个行。

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

例如: 选择部分0行0,应用程序推,以查看1 - 名称设置// 选择部1行0,应用程序推到查看3 - 地址设置

旧的方式的方式,这是很简单,只需要用initWithNibName初始化一个UIViewController,然后推送视图即可。

现在随着故事板的一切变化,或者至少我认为它发生了变化,因为我无法看到如何得到相同的结果,因为我无法将多个segue从tableView设置为不同的UIViewControllers ...并且要做旧式的方式我看不到从哪里可以从storyBoard上的视图获取NIB名称来初始化一个UIViewController来推送。

有没有人知道如何得到这个结果?

回答

25

定义从源视图控制器,一个用于每个目的地视图控制器在故事板两个“通用”塞格斯(标识为“segue1”和“segue2”,例如)。这些赛段将不会与任何操作相关联。

然后,有条件地在你的UITableViewDelegate执行塞格斯:

- (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 2014-02-22 09:11:34

16

我有同样的问题,因为你做的。问题是,你不能你tableViewCell链接到多个视图控制器。不过您可以在源视图本身链接到多个视图控制器。从到任何视图控制器,你要链接的现场观众

  1. 控制拖动主视图控制器(而不是表视图细胞)。你可以尽可能地做到这一点。请注意,源视图控制器场景中显示的segue应该类似于“从根视图控制器推入Segue ...”而不是“将Segue从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]; 
        } 
    } 
    
+0

+1解决了我的问题 – 2014-02-07 15:12:38

+0

令人惊叹!解决了我的问题!一个问题...我如何使用同一个东西进行两个以上的赛段。假设我有7个tableView单元格。除了您提供的代码之外,我会如何使用它? – 2014-06-20 03:35:19

0

像@陈仁干和@Marco解释是完全正确。为了使一切更容易些,我会建议你使用一个NSArray将在何时viewDidLoad初始化。仅举的塞格斯与您的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]; 
}