怎么让xib里的多个button一次性连接好同一个ibaction sender

iPhone开发学习笔记001——Xib界面上的控件与代码的相互关联方法
编辑:www.fx114.net
本篇文章主要介绍了"iPhone开发学习笔记001——Xib界面上的控件与代码的相互关联方法",主要涉及到iPhone开发学习笔记001——Xib界面上的控件与代码的相互关联方法方面的内容,对于iPhone开发学习笔记001——Xib界面上的控件与代码的相互关联方法感兴趣的同学可以参考一下。
(注:环境Mac OS X Lion 10.7.3 + Xcode 4.2.1 + iOS SDK 5.0.)
比如工程中添加了一个UIViewController的sub class,新建的时候选中“With XIB for user interface”,则新建完成会同时生成三个文件:xxx.h, xxx.m, xxx.xib(前期也可是*.nib,xib和nib都指UI源文件,后来苹果统一用xib后缀名了)。
xxx.h默认内容:
#import&&UIKit/UIKit.h&
@interface&xxx :&UIViewController
xxx.m默认内容:
除了工程自动添加的接口,其它的任何内容都没有。
*.xib默认有一个view,这个就是UIViewController的默认view,也是其它的任何子view都没有添加. &此时从Xcode的Object Library中拖两个控件到该view:一个label,一个button.
最后如下图:
此后在xxx.h中也添加一个UILabel和一个UIButton,并且做为属性。此时会发现Xcode自动在属性的定义旁边生成了两个用于连接的小圆标志,如下图:
可以看到上面对应的成员变量注释掉了,其实在以前的老版本上面是必须要写上的,表示对应的@property和@synthesize生成的属性访问器getter setter方法操作的是这两个成员变量。后期的版本成员变量可以不用再这样写了。即:
(1)以前的版本:
@interface&xxx :UIViewController&{
& &&UILabel&*
& &&UIButton&*
@property&(nonatomic,retain)IBOutletUILabel&*
@property&(nonatomic,retain)IBOutletUIButton&*
*.m源文件:
@implementation&xxx
@synthesize&
@synthesize&
(2)Xcode 4.2的版本:
@interface&xxx :&UIViewController&{
// & &UILabel&*
// & &UIButton&*
@property&(nonatomic,retain)IBOutlet&UILabel&*
@property&(nonatomic,retain)IBOutlet&UIButton&*
*.m源文件:
@implementation&xxx
@synthesize&label = _
@synthesize&button = _
后来的版本表示属性访问方法默认操作的是_lable和_button成员变量。头文件中省写了,当然*.m中也还是可以像以前那样写,不用在后面添加=_label和=_button也没有任何问题,应该是编译器默认作处理了。细节没多追究。
现在源代码中有label和button,对应的xib文件中也有label和button,现在想把它们对应联系起来,毕竟很多时候一些动态的效果是需要代码来实现的。现在介绍方法:
方法:“拖拽”
注意右上脚Editor位置,将视图打到assistant editor,使显示方式变成上面左边是xxx.xib,右边是xxx.h,此时点中右侧label property声明左侧的小圆,按住并移向左侧xib视图区域的Label控件上面。Xcode产生连线,此时松开即完成界面上label和代码中label属性的连接,button同理。连完后相应的小圆变成实心。鼠标移到上面,会变成+号,并且左侧xib界面上会显示已经和界面上哪个控件建立了连接。
这就是所谓的拖拽方法,然后就可以在*.m文件里面随意控制该控件的显示样式了,包括背景颜色、背景图像,圆角,字体大小,所显示的文本等等。
最近在网上偶然看到一位大牛的博文,对Xcode4中xib的绑定原理又有了新的理解,下面摘录原文叙述如下:
1.&第一步:设置xib文件的File's Owner的class属性:
在xib文件中有一个最重要的就是File's Owner,这个对象指的就是Class属性中设定的那个类的对象。只有设定了Class属性中的类才有办法进行xib界面上的控件与IBOutlet与IBAction的绑定关联。也就是说要先检查xib文件中的File's Owner的属性Class是否设置正确,然后再去设置对应的Outlet与Action。即设置了File's Owner对应的实体类之后Xcode就知道这个实体类有哪些IBOutet与IBAction,这样在拖动进行连接的时候就会显示实体类的头文件中定义好的IBOulet与IBAction。
2. 第二步:在上面指定的所属类头文件中,声明IBOutlet与IBAction:
在头文件中声明IBOutlet与IBAction这两个作用就是让编译器知道这些属性与事件调用是公共给界面调用的。IBOutet就是把界面(xib)中的对象读取到实现类中,这样就可以在实现类中对这些界面控件进行属性的设置,从而改为界面的展示。
3.&第三步:在xib编辑器中(IB)进行关联绑定(选中xib的File's Owner,Utilities窗口切换到connections inspector选项卡)
将connections inspector选项卡下的Outlets(如果在指定所属类的头文件中声明有IBOutlet),和Received Actions(如果有指定所属类的头文件中声明有IBAction)与中间窗口中的Objects下的控件相拖拽连接。
具体即通过左键拖动关联界面控件与实现类的IBOulet或IBAction即可完成界面编辑与绑定的操作。
放两张图:
Received Actions:
在此再次感谢这位大牛的博客!
本文标题:
本页链接:18277人阅读
本来应该早写这个学习笔记的。
但是写blog真是件痛苦得事。
今天刚面试了一个来IOS开发的同学。我觉得我得加紧进度啦。
学习进度:本例子是学习4天后红柚子第一个完整例子代码,基本把oc基础看完后实践的,
其实发现这个例子完完全全是为熟悉IB插件拖来拉去布局而来的。
这边申明两个方面,也是面试3个同学后给的提议,也是论坛上很多给的提议:
1.不建议使用IB文件来布局,界面文件还是需要代码写,后期维护起来简单。并且在拖来拖去时遗漏一个输出口就很悲剧。
而且大牛们都建议纯代码写,这点我也考虑到如何保持界面得美观,因为代码得话我没法实时查看布局效果,这个绝对是ANdroid开发
时一个很大额问题,不过ios上基本没事,因为ios屏幕得统一性,一般情况下美工绘制完界面后会把每个控件得坐标都给你。
当然,喜欢xib文件得也可以,甚至storyboarder。只是说,要有代码熟练书写控件得能力。
2.ARC机制,问了下最近部分培训出来的,基本是iso5.0+xcode4.2,其实这些新特性都引入了。
本来应该是个好事,但是,有个同学说,他们老师暂时不建议直接用ARC机制,首先,这样会渐渐丧失内存管理的概念(当然u作为一个从java过来的人,谈不上丧失
因为本来就没有),其次是在ios开发中会大量引入第三方库,那些库在没有支持ARC机制下,那么整个项目可能就会出现问题。因此在开发中要自己考虑周到,
当然,我是希望这个机制最终能被我开发者完全接受,毕竟省力是一件讨好的事。
我们先用xcode建立一个最简单得例子
1.打开xcode引导新建一个Project,我这边选这个模板
然后填写一些项目的基本命名和属性
第一个项目名,第二项类似于android中得包名,貌似是app唯一标识。
第四项,类前缀,默认是没有,写上后模板生成得几个类前默认带个这个前缀。
说下最后三个复选框。
第一个就是我们说的新特性之一,用storyboards管理布局文件。
第二个arc机制
第三个自动生成一个测试用例。
这次我全不选,不过我学的时候选了ARC,完全不用释放内存。这回是听了那几个朋友的建议,初学者要给自己较好的编码意识。
2.创建完后我们来大致看下目录结构分析,然后应用是如何启动的
一般我们在看一个整体应用时,我们都会去了解这个应用到底是怎么起来的(Android比如简单的就是一个入口activity。当然在往前点可能说是Applicaton)
ios中,则是在用户点击应用后,会进入这个main函数。然后我们看了下这个函数唯一能让我们关联得就是NonoAppDelegate这个类
(我这边比较俗,既看一个应用启动流程时,我保证代码能把我整个应用窜起来,不考虑后台到底怎么怎么进程,loop啊,队列什么的,目前对我们来说太深奥了)。
好了,这个main之后能跳到我们的代理类了。
我们看下代理类中内容
NonoAppDelegate.h
Created by Nono on 12-4-25.
Copyright (c) 2012年 NonoWithLilith. All rights reserved.
#import &UIKit/UIKit.h&
@class NonoViewC
@interface NonoAppDelegate : UIResponder &UIApplicationDelegate&
@property (strong, nonatomic) UIWindow *
@property (strong, nonatomic) NonoViewController *viewC
@end以上这是头文件。
@synthesize window = _
@synthesize viewController = _viewC
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.viewController = [[[NonoViewController alloc] initWithNibName:@&NonoViewController& bundle:nil] autorelease];
self.window.rootViewController = self.viewC
[self.window makeKeyAndVisible];
return YES;
实现文件我们就看部分。
该实现方法是应用启动完后,加载一个窗口,然后在窗口上添加各种View。
这边说个小注意点。
在main函数时,我们会看到两种书写:
int main(int argc, char *argv[])
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, nil);
int main(int argc, char *argv[])
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([NonoAppDelegate class]));
我们可以看到UIApplicationMain方法参数不一样。
对于这个,这哥们得博文写的比较明了了:《Main方法得讨论》
以上基本一个带窗口单空白视图的得应用就起来了。现在,我们集合IB控件往该视图上添加一些常用的基础控件
首先我们在NonoViewController.h定义一些属性控件申明输出口,以及按钮IBAction连接入口
#import &UIKit/UIKit.h&
#define kSwitchIndex 0
@interface NonoViewController : UIViewController&UIActionSheetDelegate&
UITextField *userNameT
UITextField *passWordT
UILabel *sliderL
UISlider *
UISwitch *switchB
UIButton *
@property (nonatomic , retain) IBOutlet UITextField *userNameT
@property (nonatomic , retain) IBOutlet UITextField *passWordT
@property (nonatomic , retain) IBOutlet UILabel *sliderL
@property (nonatomic , retain) IBOutlet UISwitch *switchB
@property (nonatomic , retain) IBOutlet UIButton *
-(IBAction)textFieldDoneExting:(id)
-(IBAction)backgroundTap:(id)
-(IBAction)sliderChanged:(id)
-(IBAction)segementButton:(id)
-(IBAction)switchchanged:(id)
-(IBAction)buttonOnclick:(id)
然后我们来看对应 xib文件
然后我们来看怎拖拉来与代码中的输出口连接起来。
这边我们先看下xib文件得一些显示:
首先是这个filesOwner,文件拥有者,其实就是下面这些控件对象的拥有者,而我们知道,
拥有这些对象的就是我们的NonoViewController
接下来我们看链接操作:
(擦,截这个图我得xcode死掉了好几次 = =。)
很很简单,我们知道filesowner其实就是我们得NonoViewController类,里面有我们申明得几个输出口,要很xib文件建立链接
其实就是我们在该类中定义一个对象,我们需要指向一个实例,该实例就是xib文件中我们拖进去得控件。
好,现在我们点击filesower,然后按住control键,移动鼠标箭头就会出现一个蓝色的线,随便链接到下面的一个控件松开鼠标,
会自动提示你,NonoViewController中得哪几个指针(输出口)可以指向这个控件。这样就把代码和xib文件的对象一一联系起来了。
我们可以看最右边的属性图,可以看出有个Outlets标签,里面刊例浏览当前控件的链接情况。
同时还有个reference outlets,其实刚和和上面相反,这个看字面意思就是引用得输出口
此刻我们以一个输入用户名得textField举例,我们知道filesOwner中(也就是NonoViewController)有用户名的输出口,指向了xib中的输入用户名。
那么对应得 我们选中userNameText这个控件后,他的reference outlet是在filesowner中
当你把这个关系理清楚后,那么布局与代码的链接就很简单了。
同样得,我们能看到如果是按钮类型的,会有个event动作得输出口,设计理念基本上理解上面这种后,这个是很容易明白的。
然后对于每个textfield,button什么的细节设置,都可以在右边得属性栏中修改。
5.以后我们基本就申明完一个控制类了,然后是实现类了。
不好意思,本来说重写下不用ARC机制的,当这会都11点了,没心情重写下,copy早几天写的那个讲究看下了
NonoViewController.m
ApressFirst
Created by Nono on 12-4-17.
Copyright (c) 2012年 NonoWithLilith. All rights reserved.
#import &NonoViewController.h&
@implementation NonoViewController
@synthesize userNameT
@synthesize passWordT//该定义会自动实现setter和getter方法
@synthesize sliderL
@synthesize switchB
//定义得按钮事件1
-(IBAction)switchchanged:(id)sender
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@&U will die!& delegate:self cancelButtonTitle:@&OK& destructiveButtonTitle:@&i know&
otherButtonTitles: nil];
[sheet showInView:self.view];
//定义的按钮事件2
-(IBAction)buttonOnclick:(id)sender
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@&警告提示!& message:@&你点击了按钮!& delegate:self cancelButtonTitle:@&确定&
otherButtonTitles:@&测试下&, nil];
[alert show];
-(IBAction)segementButton:(id)sender
if([sender selectedSegmentIndex] == kSwitchIndex)
switchButton.hidden = NO;
button.hidden = YES;
switchButton.hidden = YES;
button.hidden = NO;
-(IBAction)sliderChanged:(id)sender
UISlider *uiSlider = (UISlider*)
int size = (int)uiSlider.
NSString *sizeText = [[NSString alloc] initWithFormat:@&%d&,size];
sliderLabel.text = sizeT
// [sizeText release];
-(IBAction)textFieldDoneExting:(id)sender
[sender resignFirstResponder];//放弃当前焦点
//隐藏键盘
-(void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
NSLog(@&我靠!!!&);
-(IBAction)backgroundTap:(id)sender
[userNameText resignFirstResponder];
[passWordText resignFirstResponder];
//点击背景后隐藏键盘
- (void)viewDidLoad
[super viewDidLoad];
NSString *sizeValues = [[NSString alloc] initWithFormat:@&%d&,slider.t]
sliderLabel.text =
// Do any additional setup after loading the view, typically from a nib.
//- (void)dealloc
[userNameText release];//如果引入得arc机制后该方法无需调用。
[passWordText release];
[super dealloc];
- (void)viewDidUnload
[super viewDidUnload];
// Release any retained subviews of the main view.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
以上实现基本没什么太多内容。
方法中会有调用几个对话框控件
UIAlertView基本就是这么一个样子:
一般来说alert就是一个警告对话框,只要一个确认按键点击后对话框消失就好了,但是又时我们又会希望点击确认或是如上面我自己添加得测试下这个按钮
我们希望又相应得处理,那么就可以引入UIActionSheetDelegatede 委托,
同样样还用到一个UIActionSheet
同样是拥有相应得委托协议。
这些其实都是很具有通行的,一开始可能比较乱,看过2-3个后就觉得,原来如此。
然后我们看下这个方法:
-(IBAction)textFieldDoneExting:(id)sender
&&& [sender&resignFirstResponder];//放弃当前焦点
&&&&//隐藏键盘
ios中得输入不同于Android,他得显示和显示一般要手动去去做,这个方法我们是链接了我们定义的控件event方法。
上面这个方法在点击done时出发,类似与告诉程序,输入完了,取消键盘。
但是当我们对输入格式什么得做了默写限制时,比如,该输入框只能输入数字。
那貌似没有这个done操作了。
还好,一般ios默认或是长期得用户习惯取消键盘显示得操作就是点击键盘区域外得任意点取消键盘显示。
那么外面的区域其实是对应得xib中得view这个对象,此时我们需要将他强转化成UIController类型,因为只有此类型才会在属性中显示event链接选项。
然后我们给他设置一个touchdown事件出发相应得方法:
-(IBAction)backgroundTap:(id)sender
&&& [userNameText&resignFirstResponder];
&&& [passWordText&resignFirstResponder];
&&&&//点击背景后隐藏键盘
好了。睡觉。以上主要是怎么用ib来实现布局。很基础也很简单到此
(昨儿停电断网了,csdn博客怎么没有实时保存功能么,今天一看发现就前半部分了。晕哦)
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:486767次
积分:5505
积分:5505
排名:第1808名
原创:71篇
评论:381条
文章:21篇
阅读:213483
&&一款商业的移动互联网一站式体验购彩应用,支持支付宝,银联和手机支付充值支付方式
电信翼支付手机彩票
&&于中国电信翼支付合作的彩票应用,内置于电信翼支付
(1)(1)(3)(1)(1)(2)(2)(5)(3)(5)(7)(3)(9)(8)(7)(4)(7)(9)iPhone开发学习笔记007――Xcode4.2下iPhone多视图开发(自已创建MainWindow.xib和不用MainWindow.xib两种实现)
使用Xcode4以前的版本进行iPhone开发,新建Window-based Application类型的工程时,都会自动生成MainWindow.xib,并且都至少包含一个UIApplicationDelegate和一个UIWindow对象。
但是Xcode4以后,新建工程时,工程template这一块有很大改动,没有Window-based Application这一项了,但是有个Empty Application(iOS-&Application下),现在描述以这种方式新建工程,然后自已创建MainWindow.xib并使用,和不用MainWindow.xib两种实现。
另外多视图实现采用三个UIViewController来实现,一个FirstViewController使用FirstView.xib设计界面,上面一个按钮点后切找到SecondViewController的界面,一个SecondViewController使用SecondView.xib设计界面,上面也有一个按钮点后切换到FirstViewController,一个SwitchViewController负责这两个controller的界面的切换,SwitchViewController作为rootViewController,如果一个应用没有rootViewController启动就会报错&Applications are expected to have a root view controller at the end of application launch&,其实上面两种方式就是:
第一种:创建MainWindow.xib,默认有window,需要手动添加delegate指定所属类为MVTestAppDelegate,添加UIViewController,指定所属类为SwitchViewController,然后在委托MVTestAppDelegate代码中[windowaddSubview:viewController.view];将该controller的view添加到window。不需要再使用代码来创建和初始化应用委托的window和controller的view了,这些都通过MainWindow.xib来做了。下面第二种方式就是这部分不通过MainWindow.xib来做,而是通过代码实现就用delegate的window和controller的创建和初始化
第二种:即上面第一种方式中MainWindow.xib实现的工作通过Delegate中代码来实现。详细如下:
CMD+SHIFT+N打开新建工程窗口,选择Empty Application这一项(会默认提供一个delegate和一个window),取名为MVTest。如下图:
新建SwitchViewController继承UIViewController,去掉with XIB for user interface,
同SwitchViewController一样,新建FirstViewController,和SecondViewController,然后新建FirstView.xib和Second.xib,如下图:
两个xib上面分别都添加一个label和一个button,如下图:
&接下来在MVTestAppDelegate头文件中添加:
@property (nonatomic, retain)SwitchViewController *viewC// 注意:window和viewController前面的IBOutlet
+(MVTestAppDelegate *)A
并且在*.m文件中实现,如下图:
另外,SwitchViewController.h:
#import &UIKit/UIKit.h&
@classFirstViewC
@classSecondViewC
@interface SwitchViewController :UIViewController {
&&& FirstViewController*
&&& SecondViewController*
@property (nonatomic,retain)FirstViewController*
@property (nonatomic,retain)SecondViewController*
-(void)initV
-(void)showFirstV
-(void)showSecondV
-(void)removeAllV
SwitchViewController.m:
#import &SwitchViewController.h&
#import &FirstViewController.h&
#import &SecondViewController.h&
@implementation SwitchViewController
@synthesize
@synthesize
-(void)initView{
&&& NSLog(@&ttt&);
&&& if(self.firstviewcontroller ==nil){
&&&&&&& self.firstviewcontroller = [[FirstViewControlleralloc]initWithNibName:@&FirstView&bundle:nil];
&&& [selfremoveAllView];
&&& [self.viewinsertSubview:self.firstviewcontroller.viewatIndex:0];
-(void)showFirstView{
&&& if(self.firstviewcontroller ==nil){
&&&&&&& self.firstviewcontroller = [[FirstViewControlleralloc]initWithNibName:@&FirstView&bundle:nil];
&&& [selfremoveAllView];
&&& [self.viewinsertSubview:self.firstviewcontroller.viewatIndex:0];
-(void)showSecondView{
&&& if(self.secondviewcontroller ==nil){
&&&&&&& self.secondviewcontroller = [[SecondViewControlleralloc]initWithNibName:@&SecondView&bundle:nil];
&&& [selfremoveAllView];
&&& [self.viewinsertSubview:self.secondviewcontroller.viewatIndex:0];
-(void)removeAllView{
&&& for(NSInteger i=0;i&[self.view.subviewscount];i++){
&&&&&&& [[self.view.subviewsobjectAtIndex:i]removeFromSuperview];
在这两个controller,FirstViewController和SecondViewController里面,均分别添加-(IBAction)buttonClick:(id),并实现:
-(IBAction)buttonClick:(id)sender{
&&& [[MVTestAppDelegateApp].viewControllershowSecondView]; //FirstViewController调用这个showSecondView,SecondViewController里面调用showFirstView.
然后分别指定FirstView.xib的File's Owner所属类为FirstViewController,SecondView.xib的所属类为SecondViewController,并将xib界面上的按钮与IBAction连接,同时将Outlets下面的view与界面的view连接。如下图:
接下来涉及到MainWindow.xib了:
一、不用MainWindow.xib
(1) 初始化delegate的window.
&&& self.window = [[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]]autorelease];
(2) 指定delegate所在window的rootViewController,即SwitchViewController,需要新建并初始化.
&&& self.viewController = [[[SwitchViewControlleralloc]init]autorelease];
&&& [self.viewControllerinitView];
&&& self.window.rootViewController =self.viewC
二、自已创建MainWindow.xib并使用
新建一个window类型的xib命名为MainWindow.xib。如下图:
,新建好后,从Library中拖一个Object到界面上,指定其所属类为MVTestAppDelegate,
然后拖一个View Controller到界面上,并且指定所属类为SwitchViewController。
指定MainWindow.xib的File's Owner的所属类为UIApplication,并将其delegate与MVTestAppDelegate相连接:
接下来选中Test App Delegate,即MVTestAppDelegate,将viewController与界面上的Switch View Controller相连,window与window相连,
至此连完后,有个很重要的地方需要设置一下,那就是Info.plist,因为MainWindow.xib是自已创建的,所以需要指定NSMainNibFile为MainWindow。
然后运行一下,发现不行,会报错&Applications are expected to have a root view controller at the end of application launch&,那是因为没有在delegate启动时将rootViewController的view添加到delegate 的window中。虽然rootViewController(即MainWindow.xib中的Switch View Controller)已经在MainWindow.xib中指定并初始化了,但是并没有明确将该ViewController的view添加进来。另外还需要注意的一点是delegate的window已经在MainWindow.xib中初始化了。所以也不需要再通过
self.window = [[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]]autorelease];
来初始化了,此条不再需要,否则会发现rootViewController 的view被该新建的白色window挡住了,点back键可以看到退出动画时rootViewController 的view瞬间闪现。
(1) 去掉delegate的window初始化过程:
//self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
(2) 添加rootViewController的view到delegate的window:
&&& // 应用的rootViewController虽然已经在MainWindow.xib中定义并初始化了,但是还需要将之加到delegate的window上
&&& [self.viewControllerinitView];
&&& [self.windowaddSubview:self.viewController.view];
附:最终运行效果,即刚启动显示FirstViewController的view,点击Show Second,切换到SecondViewController的view,点上面的Show First 则切换回来,如下图:
不使用MainWindow.xib时,需要通过代码实现delegate的window的初始化,同时还需要初始化一个ViewController并且指定为 delegate的window的rootViewController.
&使用MainWindow.xib时,Xcode4及以后的版本需要自已创建,并且添加delegate和rootViewController,同时注意File's Owner(所属类UIApplication)的delegate与添加的delegate连接,以及指定添加的Delegate的window和viewController与界面上window和添加的具体viewController连接。同时还需要在info.plist中指定NSMainNibFile键值。最后在delegate的启动完成接口中将MainWindow.xib中的rootViewController的view添加到delegate的window,并且去掉delegate的window的默认初始化过程.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
(补充):
(1)没有MainWindow.xib时,需要指定应用Delegate的self.window和self.window.rootViewController,window和rootViewController都需要自已来定义、分配空间、初始化,在没有使用ARC的情况下,还需要控制内存回收。
(2)有MainWindow.xib时,并且在info.plist中指定了NSMainNibFile键值为MainWindow,则默认delegate的window即为MainWindow.xib中的window已经被定义和初始化了,内存回收什么的都不用我们管,并且在MainWindow.xib中若指定有UIViewController,则这个UIViewController也是定义并初始化了同window一样不用我们来管理内存回收。即,我们直接用里面的window和UIViewController即可。唯一需要注意的就是:MainWindow.xib中的UIViewController虽然不再需要我们来定义并初始化,但是这个UIViewController还没有被添加到self.window,所以我们唯一需要做的就是将这个UIViewController的view添加到self.window,或者使用这个UIViewController来初始化一个UINavigationController,然后将这个UINavigationController的view添加到self.window即可。
注:MainWindow.xib中不一定非得添加和指定View Controller,若在MainWindow.xib中添加了使用时也不一定就非得作为rootViewController,来添加到self.window,换句话说就是也可以做为rootViewController的子view controller被添加,只是在MainWindow.xib中添加了它的话使用它时不需要定义和初始化罢了(前提是需要在应用delegate头文件里面添加该viewController的IBOutlet,并且在MainWindow.xib界面中选中该delegate,然后将这个delegate中刚添加的IBOutlet与界面上的viewController相关联即可)。若没有在MainWindow.xib中添加那在存在xViewController.h、xViewController.m、xViewController.xib的情况下,使用前使用alloc init autorelease(若使用的地方没有retain则不要使用autorelease)进行一下定义和初始化并适当控制内存回收即可.
(注:后来发现self.window.rootViewController = self.myNavC和[self.window addSubview:self.myNavController.view];二者等价.)
通过这些可以猜想也可以在MainWindow.xib中添加多个view controller,然后在应用delegate里面添加对应view controller 的 IBOutlet,并且在MainWindow.xib中选中这个应用delegate将其添加的IBOutlet与界面上的view controller对应关联,然后就可以在应用delegate里面直接用这些在MainWindow.xib中添加的view controller了,不再需要关心空间分配、初始化及内存回收管理等工作。
另外,新建UIViewController的时候,可以选中With XIB for user interface,那么这个UIViewController的界面可以直接在对应的xib文件中通过Interface Builder进行设计,也可以直接在对应*.m中的viewDidLoad中进行代码设计。具体在xib中设计,又想在代码中关联并使用那就是添加IBOutlet和IBAction进行拖拽连接的问题了,前面&iPhone开发学习笔记001&&Xib界面上的控件与代码的相互关联方法&中有介绍.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
文章其中部分内容来源于网上看到的一位大牛&漫步的空间&的博客,主要是SwitchViewController的定义和实现!作个记录,以免时间长了忘记了!本人涉足iPhone开发不久,好多地方可能描述有错误,请大牛遇到帮忙指教,小弟非常感谢!
摘自 Code Heaven
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。}

我要回帖

更多关于 ios xib button 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信