【问题标题】:Navigate to a view thats within a navigation controller导航到导航控制器中的视图
【发布时间】:2013-09-06 16:51:46
【问题描述】:

我有一个包含 4 个视图的选项卡栏控制器。 3个视图是非常基本的。只是一个带有数据的表格视图(调用这些视图之一 SimpleTableView)。第 4 个视图指向一个导航控制器,其视图上有两个按钮(让我们将此视图称为 MainNavView)。两个按钮都指向不同的视图(我们称它们为 ViewA 和 ViewB),当按下导航栏上的后退按钮时,用户可以使用两个按钮(MainNavView)返回到视图。效果很好。

现在这是我的问题。我希望 SimpleTableView 中的 didSelectRowAtIndexPath 显示导航控制器中的 ViewA。当用户登陆该页面时,他可以按导航栏上的后退按钮并出现 MainNavView。

从 MainNavView 导航到 ViewA 是通过(推)segue 完成的:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [self performSegueWithIdentifier:@"segueIdentifier" sender:nil];
}

MainStoryBoard 包含一个从 MainNavView 内的 tableviewcell 到 ViewA 的 segue,称为“segueIdentifier”。

我尝试从 SimpleTableView 中的 tableviewcell 到 ViewA 进行另一个 segue 并再次执行此代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [self performSegueWithIdentifier:@"segueIdentifier" sender:nil];
}

然后我得到这个错误

NSGenericException', reason: 'Push segues can only be used when the source controller is managed by an instance of UINavigationController

现在,当我将 SimpleTableView 嵌入到导航控制器中时,这个错误很容易修复,但这不是我想要的,因为后退按钮会将用户返回到 SimpleTableView 而不是 MainNavView。

我希望一切都清楚,有人可以帮助我解决这个导航问题。这是否可以通过模态转场而不是推送来实现?

【问题讨论】:

    标签: objective-c uinavigationcontroller uistoryboard segue uistoryboardsegue


    【解决方案1】:

    您不能从不是UINavigationController 的控制器使用推送转场,您应该使用直接指向ViewA 的 modal 转场。我刚试了一下,效果很好!

    从用户的角度来看,push segue 是从/到同一视图层次结构的显式转换...我认为使用来自另一个选项卡的 push segue 可能会使用户迷失方向...

    【讨论】:

    • 我已经用模态框尝试过它并且它可以工作,但是 ViewA 不会显示带有返回按钮到“MainNavView”的导航栏。
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多