2012-01-10 101 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]; 
}