2012-10-19 73 views
0

我有一個主頁按鈕的故事板,觸摸一個按鈕塞入一個嵌入式tableviewcontroller導航控制器。當tableview出現時,它會填充項目列表。當用戶觸摸列表中的項目時,我想推送另一個tableview或詳細信息視圖。對故事板的建議與UITableViewController

下面是我在做什麼:

在我ListTableViewController我做,這是我的didSelectRowAtIndexPath方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    int row = [indexPath row]; 
    DSObject * obj = _m_DSObjects[row]; 

    if (obj.nType == 1) 
    { 
     ListTableViewController * tvc = [[ListTableViewController alloc] 
               initWithStyle:UITableViewStylePlain]; 
     [self.navigationController pushViewController:tvc animated:YES]; 
    } 
    else 
    { 
     MyDetaisViewController * vc = [[MyDetaisViewController alloc] 
               initWithStyle:UITableViewStylePlain]; 
     [self.navigationController pushViewController:vc animated:YES]; 
    } 
} 

基本上,如果是1型(另一個列表)的話,我想創建另一個ListViewController ,但如果它是類型2,(細節),那麼我想顯示我的詳細信息視圖。

我的問題是,如果它是一個列表,我的列表不填充項目。單元格行在那裏,但是是空白的,它似乎沒有使用我的單元格原型。

如果我正在做這個錯誤,並且正在尋找關於如何完成我所需要的建議,我正在打嗝。

感謝您的任何幫助!

+0

你爲什麼不創建一個segue到你的新視圖控制器而不是使用'pushViewController'?這是故事板的點 – jere

+0

ahhh是的,好的,我是故事板的新手,所以我如何確定繼續使用哪種類型?我如何告訴它繼續向正確的方向發展?我使用prepareForSegue嗎? – LilMoke

+0

看我的答案是否有幫助 – jere

回答

1

由於您已經在使用故事板,因此更好的方法是從您的ListTableViewController到您的新列表控制器和您的詳細視圖控制器創建一個segue。

然後你可以改變你的didSelectRowAtIndexPath到這樣的事情:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    int row = [indexPath row]; 
    DSObject * obj = _m_DSObjects[row]; 

    if (obj.nType == 1) 
    { 
     // assuming you named your segue "PresentListController" 
     [self performSegueWithIdentifier:@"PresentListController" sender:self]; 
    } 
    else 
    { // assuming you named your segue "PresentDetailsController" 
     [self performSegueWithIdentifier:@"PresentDetailsController" sender:self]; 
    } 
} 

如果您需要將參數傳遞到任何一個你可以使用prepareForSegue

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.destinationViewController isKindOfClass:[ListTableViewController class]]) { 

     ListTableViewController* listController = (ListTableViewController*)segue.destinationViewController;    
     listController.someParam = someValue; 

     return;   
    } 

    if ([segue.destinationViewController isKindOfClass:[MyDetailsViewController class]]) { 

     MyDetailsViewController* detailsController = (MyDetailsViewController*)segue.destinationViewController; 
     detailsController.someOtherParam = someOtherValue; 

     return; 
    } 
} 

編輯:

prepareForSegue而不是檢查的classdestinationViewController你可以使用segue.identifier檢查正確的賽格,只是另一種方法來檢查賽格的去向。

+0

是的,就是這樣!謝謝你,我是新來的故事板,並不知道如何創建兩個賽段。我需要將它們從我的ListTableViewController掛起...猜我應該想到這一點!無論如何,感謝您的幫助! – LilMoke

+0

很高興幫助,不客氣! – jere

+0

jere,與此有關的一個小問題,也許你可以幫忙。我可能有n個級別,所以通過使用performSegueWithIdentifier我只有一個固定的級別,即1。但是,一切都很好,但如果我的列表視圖需要顯示另一個列表,然後我不能繼續PresentListController ..例如。 – LilMoke

相關問題