2013-01-07 29 views
2

問題:在選擇特定的uitableviewcell時,應該打開一個新的DetailViewController。我在didSelectRowAtIndexPath中編寫了代碼,但是當我單擊單元格時,它顯示出運行時錯誤。選擇UITableViewCell導航到新的DetailViewController

我試着用[self.navigationController presentModalViewController:jacket animated:YES ];打電話,但是當我做我的視圖控制器沒有打開。

我試過的另一種方法是[self.navigationController performSegueWithIdentifier:@"JacketDetails" sender:self ];

我在segued中指定標識符在檢查器中有「JacketDetails」,但在這裏我得到一個運行yime錯誤。我把Hooked Segue從UITABLEVIEWCELL改爲VIEWCONTROLLER

當我點擊行JacketDetailViewController應該打開。我已創建類JacketDetailViewControllerNew ViewController我已經在檢查員中爲此設置了類。

我不知道它爲什麼不顯示segue,我已經在檢查器中給出了標識符,並且正確地將從tableviewcell掛鉤到新的視圖控制器。

JacketDetailViewController我想顯示一個夾克列表。目前它是空白的ViewController

我的代碼如下。你能提出一個解決方案嗎?我是這個領域的自學新手。我可能會犯一些小錯誤。我已經Google了我的問題,並試圖解決它,但我一直在這裏呆了幾天。

TshirtDetailViewController.m 

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

    [tableView deselectRowAtIndexPath:indexPath animated:YES ]; 

    JacketDetailController *jacket =[[JacketDetailController alloc]init]; 

    NSInteger index =indexPath.row; 

    NSLog(@"Row:%d",index); 


    NSString *titleString = [[NSString alloc] initWithFormat:[jackets objectAtIndex:indexPath.row]]; 


    NSLog(@"%@",titleString); 
    jacket.title=titleString; 


    // ... 
    // Pass the selected object to the new view controller. 

    [self.navigationController performSegueWithIdentifier:@"JacketDetails" sender:self ]; 


    // [self.navigationController presentModalViewController:jacket animated:YES ]; 

} 


@end 

錯誤控制檯:

2013-01-07 10:52:21.020 KidsShopee[617:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<UINavigationController: 0x6a5fac0>) has no segue with identifier 'JacketDetails'' 

*** First throw call stack: 

(0x13bf052 0x1550d0a 0xdd24b 0x3e8e 0xa671d 0xa6952 0x92e86d 0x1393966 0x1393407 0x12f67c0 0x12f5db4 0x12f5ccb 0x12a8879 0x12a893e 0x16a9b 0x1b08 0x1a65 0x1) 
terminate called throwing an exception(gdb) 
+0

歡迎StackOverflow上。我向你致敬,表示你在這方面做出的堅實的努力。請查看我爲了更好地理解如何格式化代碼塊,內聯代碼和非代碼塊所做的編輯 - 幾乎所有內容都位於代碼塊內。在目前的編輯形式中,我可以(並確實)提出你的問題。以前的方式確實值得讚賞。不要擔心你的英語,但請儘量遵守正常的大寫,標點符號和格式規則。這將幫助你的讀者理解,並會幫助你逃避downvotes! – ErikE

+0

謝謝你的讚美。你知道我試了近25次編輯相同的問題,並正確地解釋它到我的水平最好.. – krish

回答

3

嘗試與這些行打開視圖:

YoutubeViewController *objYoutubeViewController = [[YoutubeViewController alloc]initWithNibName:@"YoutubeViewController" bundle:[NSBundle mainBundle]]; 
    [self.navigationController pushViewController:objYoutubeViewController animated:YES]; 
    [objYoutubeViewController release]; 

代替YoutubeViewController的給你的視圖控制器類名&改變這些線

根據你& check.Ok if你用故事板,然後嘗試象下面這樣:

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
bookmarkViewController *myVC = (bookmarkViewController *)[mainStoryboard instantiateViewControllerWithIdentifier:@"bookmarkViewController"] 
[self presentModalViewController:myVC animated:YES]; 

到位bookmarkViewController的給你的控制器名稱&檢查。在拖&降視圖

控制器主要情節串連圖板給正確的類名稱,如下面圖片:enter image description here

到位我bookmarkViewController的名字給你要打開你的視圖控制器的名字。

+0

夥計們,當我點擊任何特定的單元格,相應的視圖控制器應該打開,這裏只是我拿了樣品有夾克,當我點擊它時,它會顯示新的JacketDetail視圖控制器..所以當我點擊其他選項,相應的視圖控制器應該打開.. – krish

+0

我使用StoryBoard,我不知道nitWithNibName:@「JacketDetailController」捆綁:無] ;]將在這裏工作。 – krish

+0

你的問題不清楚......我想你想在單元格上點擊你打開另一個視圖控制器是不是? – Vishal

0

可與這 -

JacketDetailController *jacket =[[JacketDetailController alloc]initWithNibName:@"JacketDetailController" bundle:nil];];///Change string as your nib name. 

然後嘗試,如果基於你是錯誤的導航基地以應用爲

[self.navigationController pushViewController:jacket animated:YES]; 

然後是它的viewController基礎應用 -

[self presentModalViewController:jacket animated:YES]; 
+0

我正在使用StoryBoard這不起作用...請參閱下面的運行時錯誤 – krish

0

得到「沒有標識符'JacketDetails'的繼續」,有些事情是不適合你對segue的調用。我發現我的seque名字有問題,除非我將我在故事板中賦予seque的名字複製並粘貼到我的.m文件中。即使拼寫和案例是正確的,我發現很多次,複製和粘貼已經解決了這個問題。

+0

Yup dude我複製粘貼相同的標識符,它仍然給我erorr .. – krish

0

如果您將故事板上的segue從表格視圖單元連接到另一個控制器,則根本不需要任何此代碼來啓動segue觸發器。你應該實現prepareForSegue把你需要的信息傳遞給細節控制器,但是不需要其他代碼。

+0

好吧,我應該寫在didSelectRowAtIndexPath方法prepareForsegue方法??給我舉個例子請問 – krish

+0

@krish不,你不應該實現didSelectRowAtIndexPath。從master-detail模板創建一個新項目,並查看他們在prepareForSegue中所做的工作。 – rdelmar

1

請勿在導航控制器上撥打performSegueWithIdentifier:sender:!只有您的自定義viewController可以有segues。自我調用。

更換

[self.navigationController performSegueWithIdentifier:@"JacketDetails" sender:self ]; 

[self performSegueWithIdentifier:@"JacketDetails" sender:[tableView cellForRowAtIndexPath:indexPath]]; 
+0

爲我工作得很好。 – zatatatata

相關問題