初次接触UIView的加载好像和java一样,Panel,Window,Frame,Label;
有了xib文件让设计非常方便,其实到现在我也不知道有什么更好地方法去些jar程序界面,
那一个繁琐,不是说能力的事,能让人从这么繁重的界面设计中解脱出来,至少是节省了时间;
接触IOS有三四天了,明显的感觉是code界面不一样了,在其他平台开发看代码就可以了,但是在IOS上还要看xocde的界面,因为xode是很强大的工具,事件和mode中的变量都可以通过连线来建立,不过有点不好的事完全是界面,如果打开文件编辑发现好复杂,VS工具中事件和对象是在一起的,点击界面控件可以直接绑定其对应的事件,而且在文件中也可以看到类似手动创建界面的代码,也可以手动对delegate进行加减和类型的改变,IOS这个只有连线,不过也没必要去关心这个,有一点我这个新手也比较郁闷的,ios错误的代码都会进入main(){ Application.....}中,我debug没作用,错误在下面有两个note,其实吧错误错多了就会了.
xcode6.1默认Main入口是 Main.storybord,如果用xib文件直接将这个文件删除,
1,添加一个 user interface, empty 文件,将这个文件命名为 ViewController,这时项目里就有了三个名为ViewController开头的文件;
note:在项目的general Info上面我看到有个 Main Interface 选项,我当是以为把Main删掉以后可以把ViewController.xib作为选择项,这是个很大的错误,项目一直报错,不用理会就好了;
note:在添加一个 userInface 文件不要拖动UIViewController控件到这个empty界面上,这也是个错误,这个界面的根局部是UIView,ViewController为其File,s ower;
2,将这个ViewController.xib 的custom class 设置为 ViewController.h,在file,s ower上面建立view和拖入的这个View之间连线.这在之前运行程序如果不报错的话就是黑屏的,因为他没有显示任何UIView在其上面,so 在appdelegate.m 文件中添加如下代码;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen]bounds]];
self.viewController = [[ViewControllerFirst alloc] init];
self.window.rootViewController = self.viewController;
self.window.backgroundColor = [UIColor redColor];
[self.window makeKeyAndVisible];
return YES;
}
这个时候运行,就会出现刚才拖入的UIView界面;有个奇怪的现象,如果代码里重写 loadView方法,即使是使用 super loadView,运行之后程序完全对 ViewControllerFirst.xib免疫了,不显示,但是如果这个时候在first.xib viewDidLoad中加入load自己就又会显示界面
[[NSBundle mainBundle]loadNibNamed:@"ViewControllerFirst" owner:self options:nil]
note:loadView 要么不出现,要么出现,并且出现上面这行代码;
3,在first.xib中使用自定义的其他View,当然这是个简单的SingleView;这里的代码可以看做是使用了两种方式,第一句就是加载了默认的与这个ViewControllerFirst.m自身关联的xib( xib的custom class 为ViewControllerFirst.m),从最后一句代码可以看出来,self.view == rootView ;
- (void)viewDidLoad {
[super viewDidLoad];
UIView *rootView = [[[NSBundle mainBundle]loadNibNamed:@"ViewControllerFirst" owner:self options:nil]
lastObject];
//singleView
UIView *singleView = [[[NSBundle mainBundle] loadNibNamed:@"SingleView" owner:nil options:nil]
lastObject];
CGRect rect = singleView.frame;
rect.size.width = 100;
rect.size.height= 100;
singleView.frame = rect;
CGSize rootSize = rootView.frame.size;
[singleView setCenter:CGPointMake(rootSize.width/rootSize.width,rect.origin.y)];
[self.view addSubview:singleView]; //[rootView addSubview:singleView];
4,添加Cocoa touch 文件,三个独立的和 viewControllerFirst 文件一样的三个文件,因为appdelegate中设置启动纪界面为 First.m, 所以这个完全独立的ViewControllerSecond.h ,.m ,.xib文件,要添加在 first.m 的viewDidLoad中,即紧接上面的代码,大小和位置就是 CGRect 进行设置,这里就不设置了,直接添加上去;
//singleViewWithSecondCustomClass
ViewControllerSecond * singleViewWithClass = [[ViewControllerSecond alloc]init];
[rootView addSubview:singleViewWithClass.view];
如果创建 touch文件是没有勾选创建 xib 文件,那么在ViewControllerSeond选择继续关联File,s Ower或者添加代码手动指定.m文件要加载的xib文件;
-(void)loadView{
[super loadView];
}
- (void)viewDidLoad {
[super viewDidLoad];
[[NSBundle mainBundle]loadNibNamed:NSStringFromClass([self class]) owner:self options:nil];
// Do any additional setup after loading the view from its nib.
}
xib文件大概就是这样使用 1只有xib界面,2有xib界面且关联了自己的.m文件,3有界面未关联自己的.m文件;
上面的方法同将FileOwer拖动到View上.