【问题标题】:UIViewController to know if it got pushed or popped?UIViewController 知道它是被推送还是弹出?
【发布时间】:2012-01-24 09:41:00
【问题描述】:

我有一个主 UITableView,当按下单元格时,它会转到另一个 UITableView,当按下一个单元格时,它会转到该单元格的 DetailView。

我希望中间 UITableView 的行为有所不同,具体取决于 detailView 是否被弹出或 UITableView 本身是否被推送。如果视图是从主表上推的,我想滚动到顶部,如果它在 DetailView 弹出后显示,我希望它保持在相同的位置。

有什么建议吗?

【问题讨论】:

    标签: objective-c ios uitableview uinavigationcontroller


    【解决方案1】:

    您可以在将 DetailViewController 推送到 navigationController 后调用它的 scrollToTop 方法。

    类似的东西:

    if (!detailViewController) {
        detailViewController = [[DetailViewController alloc] initWithNibName:nil bundle:nil];
    }
    [self.navigationController pushViewController:detailViewController animated:YES];
    [detailViewController scrollToTop];
    // or use the tableView directly: 
    // [detailViewController.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
    

    【讨论】:

    • 谢谢,在视图“可见”之前甚至不知道您可以滚动。
    【解决方案2】:

    在您的中间视图控制器中,直接从 UINavigationController 堆栈检查哪个视图是下一个要显示的:

    - (void)viewWillDisappear:(BOOL)animated
    {
        if ([self.navigationController.topViewController isEqual:(UITableViewController *)tvcDetailView]) {
            // Detail view has been pushed onto the UINavigationController stack
        }
        else {
            // Middle view has been popped from the UINavigationController stack
        }
    }
    

    【讨论】:

    • 它并不完美解决这个问题,因为它没有考虑到视图的首次启动(也应该滚动。但它实际上对我遇到的另一个问题很有效,所以谢谢为此!
    【解决方案3】:

    在您的中间 UIViewController 属性上创建一个 BOOL @property wasPushed 或类似的东西,当您从 UIViewController 1 初始化它时,在新实例上设置属性,将其推送到导航堆栈,然后您可以使用您在中间视图控制器的 loadViewviewDidLoadviewWill/DidAppear 方法中的属性。

    一旦您使用它,请将其设置回 FALSE 或 NO(或其他),当您由于弹出第三个视图控制器而最终返回它时,您将在其中将其设置为 FALSE/NO您的loadViewviewDidLoad 等方法。

    【讨论】:

    • 当您弹出第三个视图控制器时,viewDidLoad 没有被调用
    • 如果您遇到内存警告或 viewController 的视图在您深入堆栈时被丢弃,您会收到 viewDidLoad
    • 嗯不知道,谢谢提示。是否有关于何时丢弃 viewController 的视图的规则或定义?
    • 查看 UIViewController 文档 developer.apple.com/library/ios/#documentation/uikit/reference/… 中的 viewDidUnload 描述
    猜你喜欢
    • 2014-11-11
    • 2021-10-16
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多