iPhone故事板导航

时间:2013-03-23 16:09:21

标签: iphone ios storyboard

我是iPhone开发的新手。我现在已经完成了几个Android应用程序,所以我想在iPhone上尝试一下。

然而,我真的发现故事板导航是违反直觉的。我创建了一个基本的选项卡式应用程序,它有2个屏幕,两个屏幕都包含一个显示各种数据位的表格视图。当用户点击表格的单元格时,我希望它打开一个新的屏幕。简单?显然不是。

我尝试添加一个新的viewController并按住Ctrl键单击我现有的一个tableViews中的表格单元格,该表格单元格从根选项卡式视图控制器链接到新控制器。单击一个单元格在模拟器中无效。

我尝试将新控制器与自定义类链接,以查看这是否是我跌倒的地方但是即使我创建了一个继承自UIViewController的新Objective-C类,它也不会出现在下拉列表中框。

除非我错误地理解视图调用的heirachy应该如何工作?

任何帮助表示赞赏!


编辑:

好的,所以通过以下建议,我已经设法进一步,但我仍然不是那里。我为每个标签视图选项添加了导航控制器。然后我按住Ctrl键单击单元格行以链接到我的新webview控制器,选择要推送的选择seague集。我按住了webview到它的控制器,使其成为一个插座委托,并将以下代码添加到该行:

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

    if (_webViewController == nil)
    {
        self.webViewController = [[[RSSWebViewController alloc]     initWithNibName:@"WebViewController" bundle:[NSBundle mainBundle]] autorelease];
    }
    RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];
    _webViewController.entry = entry;
    [self.navigationController pushViewController:_webViewController animated:YES];
}

我还补充说:

@property (retain, nonatomic) IBOutlet UIWebView *webView; 

到新的视图控制器头文件。当我单击模拟器中的一行时,它会抛出以下异常:

2013-03-23 17:21:17.241 RSS [1330:c07] * 由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无法在bundle中加载NIB:'NSBundle with名称'WebViewController''。

感谢您的评论到目前为止btw家伙。 :)

2 个答案:

答案 0 :(得分:1)

您需要将UINavigationController作为链接到标签栏的视图控制器,然后您必须将UINavigationController链接到当前控制器,并将该表作为根视图控制器,然后使用push segue将单元格链接到另一个视图控制器。因此,每个选项卡都有一个导航控制器。导航控制器使其能够“推动”,否则不会发生任何事情,因为它在按下和弹出时管理视图控制器堆栈以及执行它们所需的动画。我开始时也有这个问题。

除非您的单元格全部是静态的,否则您可能需要将信息从当前视图控制器传输到新的视图控制器,例如选择了哪个项目,以便您可以告诉下一个视图控制器要显示的内容。一种方法是让下一个视图控制器属于具有属性@property (strong, nonatomic) NSString* message;的自定义类,然后在具有push segue的视图控制器中,现在可以在推送之前告诉下一个视图控制器。 / p>

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:@"your-segue-name"]) // The identifier in the Storyboard for segue (click on the segue)
    {
        // Sender will be cell
        NSString* message = [NSString stringWithFormat:@"cell %d!", [[self.tableView indexPathForCell:sender] row]];
        YourViewControllerClass* destination = [segue destinationViewController];                                                 
        destination.message = message;
    }
}

答案 1 :(得分:1)

要执行您的建议,您将从单元格中按住Ctrl键并单击。

您需要设置UITableViewDelegate。

请参阅https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDelegate_Protocol/Reference/Reference.html#//apple_ref/doc/uid/TP40006942

然后,如上面Mike D所述,你需要使用didSelectRowAtIndexPath。

这应该指向正确的方向。当我在电脑上时(我现在打电话),我会回来看看,如果你没有解决问题,我可以更深入地解释。