您的位置:首页 > 产品设计 > UI/UE

关于UINavigationContrller官方文档翻译

2015-10-22 23:01 381 查看
/**



****** 关于UINavigationContrller官方文档翻译 *****

UINavigationController

继承于:UIViewController : UIResponder : NSObject

遵守协议:UIAppearanceContainer, UIContentContainer, NSCoding, NSObject, UITraitEnvironment

基于框架:UIKit in iOS 2.0 and later.





这个UINavigationController类是专门提供与一个同等级的UIViewController

管理的“导航控制器”, 这个导航控制器使我们更方便的管理和呈现所要呈现的数据,

你也可以根据自己的需求,自定义一个继承与UINavigationController的导航控制器



手机屏幕的呈现是由导航控制器效仿等级机构的机制来呈现数据的,在每一个层次上,你

可以提供自定义的视图(自定义的控制器管理)来呈现在这个层次视图上,以下是关于

UINavigationController呈现视图的一个例子。

Figure 1(来自于模拟器的Settings)



图片地址:file:///Users/iphone5solo/Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.iOS.docset/Contents/Resources/Documents/documentation/UIKit/Reference/UINavigationController_Class/Art/navigation_interface_2x.png





导航控制器管理当前呈现的视图(screen)是通过使用,堆栈中的栈方式(Navigation stack)

管理(先进后出) 存储在导航控制器的viewControllers(NSArray)中;在数组中

的第一个控制器是根控制器,最上面的控制器就是当前呈现的控制器,你可以通过segues或者使用相关方法来添加或者移除控制器,使用者可以使用navigation bar 上“返回”按钮 或者 手势来关闭

最上面的控制器。



导航控制器也管理着屏幕上端的导航条(navigation bar)和屏幕底部的选择工具条(optional toolbar),导航条的delegate就是当前的导航控制器,当你切换控制器时,导航条会一直呈现在屏幕(只要你不隐藏它),工具条会根据当前显示的控制器相应地调整选中的按钮)。



导航控制器有自己的代理,用来push或者pop viewController,但代理必须遵守 UINavigationControllerDelegate 协议

下面是展示导航控制器管理的类的联系

Figure 2 Objects managed by the navigation contrller



图片地址: file:///Users/iphone5solo/Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.iOS.docset/Contents/Resources/Documents/documentation/UIKit/Reference/UINavigationController_Class/Art/nav_controllers_objects.jpg



Navigation Controller Views



导航控制器实际上是容纳控制器(view controller)的容器,它里面嵌入了其他(view controllers )的内容,你获取导航控制器的一个控制器(view contrller)这个view就会

自动合并导航条,工具条,以及最上面的控制器。 Figure 3 呈现了这些views如何装配然后全部呈现

到屏幕上的,在这个实例,这个导航控制器的视图嵌入最深,所以无论导航条和工具条

视图如何改变,它都不会改变,自动改变的视图是在(navigation statc)最上面的控制器。

Figure 3 The view of a navigation controller





图片地址: file:///Users/iphone5solo/Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.iOS.docset/Contents/Resources/Documents/documentation/UIKit/Reference/UINavigationController_Class/Art/NavigationViews_2x.png



注意:因为这个内容视图是基于这个导航条(iOS 7 and later),当你自定义你的view controller时,你必须考虑一下这个空间布局。



导航控制器在管理它的子控件时,会尽可能的调整导航条的布局,但你不能直接改变导航条的frame,bouns, alpha的值。如果你继承了UINavigationBar, 你必须实例化你的导航控制器 使用initWithNavigationBarClass:toolbarClass: 这个方法,如果要隐藏导航条,使用e navigationBarHidden 属性,或者setNavigationBarHidden:animated:方法



导航控制器在创建导航条时,会使用navigation item的对象来联系(navigation stack)各个控制器,使用UIAppearance APIs来定做导航条,为了改变导航条里面的内容,你必须在你自定义的

控制器中配置navigation items。





Updating the Navigation Bar



每当最上层的控制器改变,导航控制器就会相应地更新导航条。具体来说,导航控制器会更新导航条的

左、中、右三个地方的bar button item, 每一个Bar Button items 是UIBarButtonItem 实例化的对象,你可以根据你的需求创建自定义的items或者系统标准的items.



导航条的字体是由导航条自己管理的,使用tintColor属性改变导航条内的items字体颜色,使用barTintColor属性改变当行条自身字体颜色。

导航条字体的颜色不能从当前控制器继承。更多关于导航条的信息,请看 *UINavigationBar Class Reference* 更多关于如何关键

bar button items, 请看 *UIBarButtionItem Class Reference*.



The Left Item

对于所有的导航控制器的根控制器,这个左边的item提供了一个返回到上一个控制器的功能

(下一个控制器的返回按钮默认是上一个控制器的backBarButtonItem属性)。

左边的item的内容必须遵守如下规则:



* 如果最上面的控制器有自定义的bar button item并导航条就会呈现它。

* 如果最上面的控制器没有自定义的bar button item, 但上一个控制器有backBarButtonItem

属性, 导航条就会现在上一个控制器的backBarButtonItem。

* 如果一个自定义的bar button item 在前后两个控制器都没有详细配置时,默认返回按钮上的标

题为前一个控制器的主标题,如果在navigation stack中只有一个控制器,返回按钮不会被呈现。



注意:万一一个返回按钮的标题超过了当前的可用空间,导航条就会调整返回按钮的实际标题为

“back”(这个情况只有这个返回按钮是由上一个控制器的backBarButtonItem创建的),如果最

上面的控制器的返回按钮是自定义的一个leftBarButtonItem or leftBarButtonItems 对象,

就算是navigation item的私有item,导航条不能改变器按钮标题。



The Middle Item

中间Item的更新必须遵守以下规则:

* 如果最上面的控制器有一个自定义的title view, 导航条会在默认的地方呈现它,为了详细设置

自定义的title view, 需要在当前控制器的navigation item中设置titleView.



* 如果没有创建自定义的title view, 导航条默认会呈现一个包含label的title view,label

上显示的通常是这个控制器的标题,如果你想要修改标题,你可以修改该控制器的navigation item

的title属性。



The Rgiht Item

右边Item的更新必须遵守以下规则:

* 如果最上面的控制器有自定义的right bar button item, 导航条就会呈现它。

可以通过设置控制器的navigation item的rightBarButtonItem属性来配置它。

* 如果没有具体配置的right bar button item,导航条就不会呈现它



Displaying a Toolbar

导航控制器在它的view 体系里管理可选择的工具条,当呈现工具条时,工具条包含着当active(活

跃)控制器的toolbarItems属性的items;当active view controller改变是,

导航控制器就会更新工具条的items到合适的位置来搭配新的控制器。



默认情况下,toolbar是隐藏的,如果需要显示可以通过控制器的navigation controller 调用

setToolbarHidden:animated:方法叫出工具条,如果不是所有的控制器支持toolbar items

在push和pop操作之后,你的代理可以使用这个方法来切换工具条的能见度。为了能使用一个自定义的

工具条, 在实例化导航控制器的使用initWithNavigationBarClass:toolbarClass:方法。

如果你使用自定义的工具条和导航条来创建导航控制器,注意在屏幕呈现导航控制器前负责push和

设置view controllers.



Adapting to Different Environments(适用不同的环境)

导航界面在horizontally compact 和 horizontally regular环节中仍然相同。当在这两种

环境切换界面时,只有导航控制器的view的大小会改变,导航控制器不会改变填的view等级

或者它的views的布局。

当配置sugues在两个view controllers(在同一个navigation stack中),这个标准的Show h

和 Show Detail segues的行为如下:

* Show segue - 控制器push这个具体说明(自定义)进入它的navigation stack

* Show Detail segue - 控制器present这个具体说明(自定义)呈现出来(相当于modal)

这些行为在其他segue(不在同一个导航控制器的栈中的两个view controller)是没有改变的。





Interface Beahavious

一个导航控制器支持以下的行为在它的界面:

* Supported interface orientations - 导航控制器对象在确定支持的界面方向时,不能在其导航堆栈上查询视图控制器, 在iPhone中,导航控制器支持所有的视图,除了portrait

upside-down(颠倒). 在 iPad, 导航控制器支持所有的视图,如果导航控制器有代理。这个代理

可以具体说明一个不同的支持视图的设置通过使用

navigationControllerSupportedInterfaceOrientations:方法



* Presentation context - 一个导航控制器描绘出一个外观通过madal呈现出view

controller,当madal的转换方式为UIModalPresentationCurrentContext or

UIModalPresentationOverCurrentContext, 从view controller(在navigation

stack)模态视图将覆盖导航控制器的界面。





Creating Navigation Controllers





// 实例化一个导航控制器对象

- (instancetype _Nonnull)initWithRootViewController:(UIViewController * _Nonnull)rootViewController



// 实例化一个带有导航条,和工具条的导航控制器对象

- (instancetype _Nonnull)initWithNavigationBarClass:(Class _Nullable)navigationBarClass

toolbarClass:(Class _Nullable)toolbarClass



属性

* topViewController 最顶部的控制器,当前可见的控制器

* visibleViewController 与当前课件视图相关联的控制器

* viewControllers (NSArray)当前导航控制器的堆栈中的控制器



// 替代当前堆栈中的控制器

- (void)setViewControllers:(NSArray<UIViewController *> * _Nonnull)viewControllers

animated:(BOOL)animated



// 推送一个新的控制器进入导航控制器的导航堆栈中,此控制器成为最上面的控制器, 新的控制器的view嵌入导航控制器的界面

- (void)pushViewController:(UIViewController * _Nonnull)viewController

animated:(BOOL)animated



// 推出最上面的控制器,从堆栈中移除控制器,如果对根控制器使用这个方法,将上面也不做

- (UIViewController * _Nullable)popViewControllerAnimated:(BOOL)animated



// 把所有的控制器都推送出去(移除)除了根控制器,剩下根控制器

- (NSArray<__kindofUIViewController *> * _Nullable)popToRootViewControllerAnimated:(BOOL)animated



// 把压在指定的控制器上面的控制器都推出,使之成为最上面的控制器

- (NSArray<__kindofUIViewController *> * _Nullable)popToViewController:(UIViewController * _Nonnull)viewController

animated:(BOOL)animated

属性

* interactivePopGestureRecognizer // 手势向右滑来pop







Configuring Navigation Bars



属性

* navigationBar 导航条,由导航控制器管理

* navigationBaeHidden 是否隐藏导航条

// 是否隐藏控制器

- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated



Configuring Custom Toolbars



属性

* toolbar 工具条 由导航控制器管理

* toolbarHidden 是否隐藏工具条

* hidesBottomBarWhenPushed 当push是否隐藏工具条



// 通过在堆栈中的控制器的navigation controller来设置我们的工具条

setToolbarItems:animated:

// 是否隐藏工具条

- (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated

Hiding the Navigation Bar



属性

* hidesBaesOnTap // 使用tap手势隐藏导航条 默认为NO

* hidesBarsOnSwipe // 使用swipe手势隐藏导航条 默认为NO

* hidesBarsWhenVerticallyCompact // 在 vertically compact environment环境隐藏导航条

默认为NO

* hidesBarsWhenKeyboardAppears // 当键盘弹出时,隐藏导航条 默认为NO

* navigationBarHidden // 隐藏导航条 默认为NO

// 动态隐藏导航条

setNavigationBarHidden:animated:



* barHideOnTapGestureRecognizer // 通过tap手势显示和隐藏导航条、工具条

* barHideOnSwipeGestureRecognizer // 通过swipe手势显示和隐藏导航条、工具条



Action Method for Displaying View Controllers

// 呈现出指定的控制器到导航控制器界面上

- showViewController:sender: 该方法和 pushViewController:animated:相似

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: