2011-12-18 52 views
0

我正在使用initWithNibName將細胞推到細節視圖,但我想使用單個故事板而不是有大量的nib文件。當單擊單元格時,下面的代碼應該將視圖推送到子類別ViewController。這些單元格從json數據是動態的。pushViewController沒有推

它沒有給出任何錯誤。你認爲它是導航控制的問題嗎?爲了測試,我在這個視圖上添加了一個按鈕,它可以工作;當我點擊它時,它會推到下一個視圖。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSDictionary *dict = [rows objectAtIndex: indexPath.row]; 


    subcategoriesViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"subcategoriesViewController"]; 
    controller.CATNAME = [dict objectForKey:@"C_NAME"]; 
    controller.CATNUMBER = [dict objectForKey:@"CAT_ID"]; 
    [self.navigationController pushViewController:controller animated:YES]; 
// [controller release]; 
} 

好吧我想我找到了原因;但不知道如何解決它。

該控制器中的tableview實際上是viewController的子視圖。我複製這些文件並創建一個新的視圖,這是一個TableViewController。這個代碼在TableViewController中使用時可以完成這項工作,但是當它在tableview是ViewController的子視圖的控制器中使用時,它不會這樣做。

我想讓表格成爲子視圖,因爲我想將圖片放在表格上方。所以,我覺得這裏的問題是這一行:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

它不引用表視圖。任何人都可以告訴我如何修改它,以便引用視圖中的表?

回答

1

如果didSelectRow...沒有被調用,那麼你的視圖控制器可能沒有被設置爲你的表視圖的委託。

這是爲使用UITableViewController時自動設置的,但必須在使用標準視圖控制器時明確執行。

+0

是的。這是有道理的。我想到了它,但我使用了下面的代碼來做到這一點。這不夠好嗎? @interface categoriesViewController:UIViewController { \t UITableView * tableview; } – 2011-12-18 17:19:41

+0

這是對的,但你也需要告訴表格視圖誰是委託。您可以在故事板中連接它,將委託出口從表格視圖拖到視圖控制器。 – jrturton 2011-12-18 17:21:32

+0

我這樣做了,但它卻沒有給出理由就開始崩潰。我想我明天會重新開始。謝謝你的時間。 – 2011-12-18 18:02:06

0

對您的問題的回答通常是self.navigationController實際上是nil,因爲您的視圖中沒有導航控制器。你可能必須得到一個指向你projet的導航控制器的指針,並將它推向你的視圖。

+0

不,它不是零。我用Nslog檢查了一下。我仍然認爲問題在於參考。 – 2011-12-18 17:11:22

+0

你認爲它是導航控制器嗎? – gsempe 2011-12-18 17:14:06

+0

原來這是在界面構建器中引用缺失。 – 2011-12-18 20:05:55