我正在尝试使用表视图和导航控制器。这是我在使用NIB文件时使用的代码。如果我使用NIB文件,这段代码可以正常工作,但我决定尝试使用storyboard -
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if (_webViewController == nil) {
self.webViewController = [[[WebViewController alloc] initWithNibName:@"WebViewController" bundle:[NSBundle mainBundle]] autorelease];
}
RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];
_webViewController.entry = entry;
[self.navigationController pushViewController:_webViewController animated:YES];
}
我在故事板中创建了另一个场景,并在那里设置了所有内容。当用户单击此表视图中的单元格时,它们将被带到该场景。这就是我为代码所写的内容,但它不对,我无可救药地陷入困境:( -
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"articleView"]){
UINavigationController *navigationController = segue.destinationViewController;
WebViewController *controller = (WebViewController *)navigationController.topViewController;
controller.webView = self;
}
回答 - 答案2和3都是正确的
答案 0 :(得分:2)
如果您的表视图已嵌入导航控制器中(从您的第一个代码片段开始),那么您的segue的目标视图控制器将是WebViewController,而不是导航控制器。
因此,您可以让prepareForSegue方法直接传递项目:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"articleView"])
{
WebViewController *controller = (WebViewController *)segue.destinationViewController;
RSSEntry *entry = [_allEntries objectAtIndex:[self.tableView indexPathForSelectedRow].row];
controller.entry = entry;
}
}
答案 1 :(得分:2)
我在2天前遇到了一个非常类似的问题,用户在一行中选择了公开附件,想要调用一个segue。什么对我有用:
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { [self performSegueWithIdentifier:@"articleView" sender:[self.tableView cellForRowAtIndexPath:indexPath]]; }
为了你,我还测试了tableView:didSelectRowAtIndexPath:它可以工作。
享受,
达明
答案 2 :(得分:1)
您可能会发现这个优秀的两部分教程很有帮助
http://www.raywenderlich.com/5138/beginning-storyboards-in-ios-5-part-1