关于UINavigationContrller官方文档翻译

来源:互联网 发布:广东省网络医院 接诊点 编辑:程序博客网 时间:2024/05/21 09:12
/**
 
        ******   关于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:相似


 */
0 0
原创粉丝点击