关于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:相似
*/
****** 关于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:相似
*/
相关文章推荐
- uestc 594 我要长高 单调队列优化
- (面试题)两个对象值相同 (x.equals(y) == true) ,但却可有不同的 hash code ,这 句话对不对?
- android入门(一)---UI组件之文本框(TextView)
- 蓝牙Android_Lightblue调试工具存在的bug
- 基于STM32与μC/GUI的多路PID控制器
- Servlet的生命周期及filter,servletRequest和servletResponse
- 在Android6.0中使用AlertDialog.Builder出现的问题
- Liunx的/proc/cpuinfo中部分信息解释
- UINavigation导航控制器的使用
- Android 高级UI设计笔记04:可以拖动交换item位置的GridView ---> 使用setDrawingCacheEnabled(boolean flag)提高绘图速度
- UI设计
- 使用RequestContext对上下文内容进行重用
- IOS UI控件 - UIView详解
- LeetCode---Unique Paths II
- UIControl控件的综合使用
- iOS开发UI篇—模仿ipad版QQ空间登录界面
- iOS开发UI篇—iPad开发中得modal介绍
- iOS开发UI篇—ipad项目 popoverController使用注意
- iOS开发UI篇—ipad 项目 popoverController简单介绍
- 什么是Coded UI