记得几个月前刚接触ios时,因为要急着完成任务,树立运用的办法彻底依照书本,而书本讲的是xcode3,而装的xcode的版别是4。所以,书上的一些东东和xcode的版别对不上,十分烦恼,为了创立一个windows base 的project,都费力了心思。
过了几个月,回到来想想当初的疑问,无非是没有理解xib的原理,没有弄清楚在ios里,假如经过xib来创立目标。
关于xib创立目标,能够从发动开端。咱们来看看windows base project的做法和 single view project的做法。
一:关于 window base 的创立过程:
第1步:将创立的xib设置为发动frame。这个能够在 target>>summary>>main interface中设置。
这有点相当于将运用的发动进口设置为本xib。
第2步:这个发动xib的file owner一定是 UIApplication。但真实的大局AppDelegate是哪个呢?
那就需求你在xib中新建一个Object,然后把类名设置为您的真实的发动署理类:xxxx_AppDelegate
留意:这儿需求将发动类绑定到 file owner的delegate。(和UI元素的绑定办法相同)。
咱们再看看main函数:
int retVal = UIApplicationMain(argc, argv,nil, nil);
这儿没有指定发动的署理类。我猜测最终一个参数不设置的话,就会从发动xib中的UIApplication.delegate来指定。
第3步:继然是window base,那你当然需求在发动xib中创立一个window。
创立的window与代码怎么对应呢?一般咱们是在 xxxx_AppDelegate中创立一个UIWindow。
然后在xib中将window与署理中的实例衔接上,然后代码中就直接用了,和运用一个控件相同。
这么,程序一发动,就创立了一个UIWindow。不需求你写UIWindow的创立代码。
第4步:作为一个UI程序,应当会有界面逻辑,而界面需求包含在UIViewController中,
所以,你能够在发动xib中创立UIViewController,绘制你的界面。或许直接相关别一个nib文件。
当然,你要运用它,依然需求在xxxx_AppDelegate中声明UIViewController中的目标viewController,然后在xib中树立衔接。
留意:这种办法下,UIViewController是主动创立的,不需求你写创立的代码。
最终一步:经过上面的动作。在发动署理的发动办法didFinishLaunchingWithOptions中增加以下代码就搞定了。
[window addSubview:viewController.view];
[window makeKeyAndVisible];
依照上面这种办法,咱们的发动界面没有运用 alloc来创立任何ui目标,所有ui目标都是经过xib加载时主动生成的。
需求留意的是,这种办法,需求将xib设置为 main interface。假如您的程序是iphone和ipad习惯的,那能够设置两个不一样的发动xib.
假如在xcode4中要创立 window base project,差不多就上面的套路。靠xib来生成window和viewController.
注:我也见到过没有设置main interface的程序,并且在main中也没有设置AppDelegate类。我猜测,默以为运用MainWindow.xib做为
发动Interface。好象书中的hello_world即是这么的。
二:再看看single view project的创立办法。
第1步:当然,咱们不能设置 main interface。咱们需求看看main函数。在其间设定发动署理类。
UIApplicationMain(argc, argv,nil, NSStringFromClass([SingViewTest_AppDelegateclass]));
在这儿,第4个参数咱们指定了发动的AppDelegate,而不是象上面那样,经过xib来指定发动署理类。
第2步:在发动办法中,自行创立window
self.window = [[[UIWindowalloc] initWithFrame:[[UIScreenmainScreen] bounds]] autorelease];
上面的代码创立一个全屏的窗体,看看,是咱们自已alloc的。
第3步:经过程序来创立 SingelView的viewControoler.
self.viewController = [[[SingViewTest_ViewControlleralloc] initWithNibName:@"SingViewTest_ViewController"bundle:nil]autorelease];
假如您的viewController想经过xib来加载(一般的办法),那就采取上面的办法。
假如您不想运用 UI 设计器,你也能够
MyViewController *vc = [[ MyViewControlleralloc] init];
当然,这种状况你需求在viewdidLoad中动态生成您的ui元素。
最终一步:将viewcontroller的ui显示出来。
self.window.rootViewController =self.viewController;
[self.windowmakeKeyAndVisible];
经过上面两个工程的创立,能够看出,ios供给两个发动进口的办法。
办法一:指定xib做为发动interface,这种办法下,需求自已指定发动AppDelegate。
能够经过创立 object,然后改类名,再绑定的办法。
这种办法下,能够以此为起点,将真实的发动window,发动ViewController在此处创立和衔接。
关于简略的运用,咱们还能够在这个发动的xib里,将发动的ui都画好。
这个需求修改 main函数中 UIApplicationMain办法的最终一个参数。
这种办法下,发动的windows,viewController需求自已通过alloc来生成,后边的做法和办法一就没啥区别了。
引荐网站 http://www.keymob.com/