视图控制器-navigationcontroller-xib方式
xib方式使用导航控制器
1)创建空应用程序,修改main函数,将最后一个appdelegate参数改成nil
2)添加名为mainwindow的xib
3)设置程序的main interface为mainwindow.xib
4) 设置xib的file's owner的类为uiapplication
5) 添加一个nsobject对象,设置类是appdelegate,在file's owner上点右键,连接delegate到当前这个代理对象上。
6) 修改appdelegate头文件,在成员变量window前添加iboutlet修饰符,使之可以连线。在实现文件里,删除和window相关代码。
7)在xib里添加一个window对象,在appdelegate对象上点右键,连接window到刚添加的window对象上。一定要设置window的visibleatlanch属性为yes否则,控件不能 输入
8)拖一个navigationcontroller到xib文件里
9) 在window上点右键,连接rootviewcontrolller到刚添加的导航控制器上
10)添加一个视图控制器,来充当导航控制器的根视图控制器,这个控制器要带着xib文件。
11)在mainwindow.xib文件里,设置导航控制器上的根视图控制器的类为刚添加的rootviewcontroller
12) 这时候在rootviewcontroller的视图上添加一个按钮,程序就可以跑起来。
13)添加一个新的控制器secondviewcontroller,在根视图控制器上,编写按钮点击事件,push出来secondviewcontroller.
14) 在secondviewcontroller上添加一个文本框和一个按钮,并使用辅助视图建立连线。建立一个namelabel的标签和一个click按钮点击事件
15)在rootviewcontroller里添加标签namelabel,使用辅助视图建立连线,建立按钮的点击事件
16)在secondviewcontroller里定义协议或者block,对于协议,需要创建一个协议属性,对于block需要在实现文件里创建一个私有成员。
17)在secondeviewcontroller里的按钮点击事件里,触发协议或者block.并且使用pop方法回到rootviewcontroller
18) 在rootviewcontroller里实现协议,在push到secondviewcontroller的时候,设置secondviewcontroller的代理是自己。或者,在push到secondviewcontroller的时候
调用secondviewcontroller里的方法,传入block;
注意:block是c语言的扩展,函数参数括号里是有参数名称的。
如果在第7步,没有设置window的visibleatlanch属性为yes,就的在视图控制器里写如下类似代码
if(!textFiled.window.isKeyWindow)
{
[textFiled.window makeKeyAndVisiable];
}
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
if (!textField.window.isKeyWindow) {
[textField.window makeKeyAndVisible];
}
}
否则类似textfield的控件,不能输入内容
在xib里,可以设置导航控制器里的根视图控制器的标题