首页 文章

导航控制器中导航堆栈使用的数据类型是什么

提问于
浏览
1

导航控制器对象使用导航堆栈管理当前显示的屏幕,导航堆栈由视图控制器阵列表示 .

引用和数字都来自Apple official document . 引用提到了单词 navigation stack ,而该图实际上将 NSArray 指向导航堆栈 .

这种描述开始让我感到困惑

阵列中的第一个视图控制器是根视图控制器 . 阵列中的最后一个视图控制器是当前正在显示的视图控制器

引用描述了属于堆栈数据类型的特征,另外,它们确实在StoryBoard中存在 push segue . 似乎UINavigationController确实使用堆栈数据类型而不是数组/ NSArray数据类型 .

Question 1

导航控制器的导航堆栈 StackArray 使用的数据结构究竟是什么?

Question 2

导航控制器中topViewController和rootViewController有什么区别

2 回答

  • 1

    Question 1 ViewControllers属性在 UINavigationController 定义中定义为NSArray,但具有像popViewController方法和pushViewController方法的堆栈行为,但您也可以修改ViewControllers数组,传递新的Array ViewControllers数组

    @property(非原子,复制)NSArray <__ kindof UIViewController *> * viewControllers; //当前视图控制器堆栈 .

    2 Examples of Stack Behaviour Methods

    - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
    //Others
    - (nullable UIViewController *)popViewControllerAnimated:(BOOL)animated
    //Others
    

    But you can also set your ViewControllers array using this method

    - (void)setViewControllers:(NSArray<UIViewController *> *)viewControllers animated:(BOOL)animated;
    

    Question 2

    TopViewController 是您正在查看的当前viewController, rootViewController 是已添加到导航堆栈的firstViewController

  • 1

    你的第一个问题的答案是NavigationStack使用堆栈数据结构的 Array Representation . 我认为Stack有两种表示形式,一种是数组,另一种是链表 . 所以 pushpop 操作是使用Array在这里执行的,使用: -

    pushViewController(_:animated:)
    popViewController(animated:)
    

    你的第二个问题的答案 - 导航控制器的TopViewController表示堆栈顶部的视图控制器,RootViewController是堆栈上的第一个viewcontroller

    希望这可以帮助! .

相关问题