2013-01-18 42 views
0

好的,所以我有一個UITableViewController。其中我有動態tableviewcell定義。現在爲了簡單起見,可以說有三個動態行定義。見截圖故事板和uitableview的困境

enter image description here

那麼什麼,我想要做的是,當用戶觸摸

  • 第1行,我想帶他們去viewcontroller1
  • 第2行,我想帶他們到viewcontroller2
  • 3排,我想帶他們去viewcontroller3

下面是困境部分,當我選擇原型單元格並使用模式將其連接到viewcontroller1時,從那時起,我觸摸它的任何行將始終讓我查看控制器1。我想爲我的UITableViewController編寫這段代碼,但我不知道如何創建多個聖人? (見下)

現在很可能這是故事板和UITableView的限制,它不能用動態單元完成。我將不得不做的是創建靜態單元格,並手動將每個行連接到相應的視圖控制器。我只想知道是否有更簡單的方法,因爲我有50行,每行需要連接到新的視圖控制器。是的,我喜歡連接故事板中的東西。只是想得到第二個意見,如果有更好的方法。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
     // Navigation logic may go here. Create and push another view controller. 

     //SECTION #0 
     if (indexPath.section == 0) 
     { 
      [self performSegueWithIdentifier:@"goto1" sender:nil]; 

     } 

    //SECTION #1 
     if (indexPath.section == 1) 
     { 
      [self performSegueWithIdentifier:@"goto2" sender:nil]; 

     } 

    //SECTION #2 
     if (indexPath.section == 2) 
     { 
      [self performSegueWithIdentifier:@"goto3" sender:nil]; 

     } 

} 

回答

2

也可以從控制器工具欄中的黃色控制器圖標中拖出一個segue。選擇你的表格視圖控制器,會出現如下圖所示的黑色工具欄。

Controller Toolbar

從黃色圖標到期望的目的地控制器拖動。

這樣一個segue不直接附加到單元格或其他任何東西。給它一個標識符,你可以隨時在代碼中執行它。

在你的情況下,你可以根據你認爲合適的任何邏輯,在tableView:didSelectRowAtIndexPath:中撥打performSegueWithIdentifier:sender:

[編輯]:

「只是想,如果有任何更好的方法來獲得第二個意見。」

50個不同的塞格斯&目的地似乎是一個可怕的很多。你確定你不能重用一個(或者至少少於50個)視圖控制器(比如說只有內容不同時)。例如,您顯示50個包含內容的類似頁面。而不是創建在故事板50的視圖控制器:創建一個單獨的一個,並設置視圖控制器的內容被示出收到:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    MyPageController *page = (MyPageController *)segue.destinationViewController; 
    // get content for selected row 
    page.content = myContentModelObject; 
} 
+0

聖潔的莫莉,我沒有意識到我可以用這種方式多連接聖人。哦,非常感謝你這個完美的答案! –

+0

@SamBudda - 這仍然意味着你將會拖出50條細線......並將它們全部貼上......我不認爲你想這樣做。 – foundry

+0

啊,同時也在編輯。你確定你確實需要50個賽段嗎? –

0

塞格斯只能通過在故事板拖動線出被創建。一旦創建了它們,您就可以自定義它們,但如果您必須首先將它們全部繪製出來,那麼這並沒有什麼用處。

爲了節省您繪製所有這些行(並調試它們......),您可以輕鬆地完成Segue的工作而無需使用故事板。對於模式階段:

#pragma mark - Table view delegate 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString* identifier = [NSString stringWithFormat:@"%d",indexPath.row]; 
    RWViewController* detailView = [self.storyboard instantiateViewControllerWithIdentifier:identifier]; 
    [self presentViewController:detailView animated:YES completion:nil]; 
} 

您仍然可以在故事板中創建50個ViewController。給每一個匹配到相應的indexpath.row

號線畫出一個數字標識符...

如果故事板變爲50個viewControllers鋪天蓋地,考慮使用一個單獨的廈門國際銀行爲每一個(或者你可以打出幾個不同的腳板,並將它們分組排列)。