UINavigationController的特点:
1)采用栈的形式来存放多个视图
2)当需要视图跳转是,多个视图按一定次序入栈,位于栈顶的视图显示出来。
3)当需要从当前视图返回前一视图是,可将栈顶的视图弹出,接着显示器下面的视图。
4)如此操作下去,直至返回到navigationController中的根视图为止。
使用技巧:
1)在一个程序的人口类中,需要声明一个UINavigationController的属性,以便使用。
2)在这个navigationController属性在初始化时,可以指定其根视图。
3)如需视图跳转,将需要显示的ViewController通过其navigationController属性的pushViewController方法将其压入栈中
4)弹出视图时,可以通过popViewControllerAnimated方法将栈顶视图弹出。
注意事项:
1)每个ViewController都继承与UIViewController,故其自身都拥有一个navigationController属性和tabBarController属性。
2)当某个UIViewController位于某个tabBar
当表视图需要一个表视图单元的数据时调用,一般用cellForRowAtIndex参数作为数据来源的索引,直接作为数组下标即可。如果用全局变量作为数据索引,就有两个问题。
1.全局变量需要与实际的数据在数组中的位置同步,需要添加全局变量增加或减小的代码。
2.在重新绘制表格的时候需要把全局变量清零,就是当全局变量等于数组元素个数的时候。例如在拨号程序中,原数组中并不是每个元素的数据都是可用的表格单元数据,需要判断布尔属性,控制全局索引自增。在函数开头,添加判断全局变量是否等于数组元素个数的代码,将全局变量清零,否则在上下拖动表格时会出现数组下标越界的错误。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
UINavigationController应用程序框架:
1)创建应用程序为窗口框架
2)设置窗口子视图为导航控制器
#import<UIKit/UIKit.h>
@interface NavAppdelegate:NSObject<Appdelegate>{
UIWindow * window;
UINavigationController * navController;
}
@property (nonatomic,retain)IBOutlet UIWindow*window;
@property (nonatomic,retian)IBOutlet UINavigationController * navController;
@end;
在appdelegate.m中把navController添加为window的子视图
在mainWindow.nib中添加一个Navigation Controller对象,并且从AppDelegate按住control键连接到 Navigaion Controller对象,连接到Appdelegate的输出口navController;
3)创建根视图控制器
创建根视图控制器类,注意是派生在UITableViewController的。
在mainWindow.nib下,列表模式下展开Navigation Controller对象,然后选择其子对象View Conroller,
苹果键+4打开身份识别设置Identify,设置class为根视图控制器
4)在根视图控制器中添加一个数组用来存放所有需要入栈的视图,注意最后一个入栈的视图是展现在最上面的。
5)定义其他需要导航的子视图
6)在根视图的数据源方法tableView:cellForRowAtIndex,获取出列单元,如果不存在就创建一个恶
7)在根视图的数据委托方法didSelectRowAtIndexPath:中把要入栈的最后那个视图压人栈
[self.navController pushViewController:nextController animatied:YES];