iOS之处理基本交互
2013-03-05 20:01 xioaxiao 阅读(346) 评论(0) 编辑 收藏 举报现在开始学习第三章,处理基本交互。本篇我们将编写一个具备两个按钮、一个标签的应用程序,相比于前一个程序的最大特点就是它可以与用户交互。
1:创建一个项目,所用模版仍与前一个项目(Single View Application)一样。命名为Button Fun。
2:向view中添加三个控件,分别是:两个button控件(分别命名为Left,,Right),一个Label控件(将标签中的文本删除)。如图所示。
这时,虽然标签中没有文本,我们也看不到它,但在左侧的列表,view中仍能看到有一个label控件。此外,图中的蓝色线是xcode为了帮助我们安排好界面布局而自动添加的。
3:添加IBAction(操作)和(IBOut)输出口。
这里解释下操作和输出口。
输出口:可以理解为一个指针。在Xcode中,要想通过写代码控制IB中的控件,就要将代码与控件联系起来,这就需要一个桥梁,而输出口就是这个桥梁,它的作用就是告诉IB,代码中的某个实例变量将被连接到nib中的对象(控件)。
操作:某个控件一旦有了动作,可以触发一个操作。举个例子:如果我要开灯,当我点击了灯的开关这个控件,灯亮了,那灯亮就是一个操作,开关控件打开,触发了灯亮这个操作。(还是糊涂吧,先看下面的步骤)
在项目窗口右上角有7个按钮,点击左数第二个,辅助编辑器(Secondary Editor ),这样可以并排显示界面与视图控制器的头文件。
a)首先添加一个操作:按住control键,鼠标点击Left按钮不放,滑动到viewController.h中,松开鼠标,这时会出现如下图所示的对话框,在Connection中选择Action,在Name中输入操作名buttonPressed,其它的不变,点击Connect,就创建了一个与button相连接action。仍然是按住control,鼠标点击right按钮不放,滑动到刚才添加的action上,便将两个按钮关联到了一起。这样两个按钮有任何一个被按下都会触发这个action。
b)现在为Label控件添加一个outlet。按住control,鼠标点击label控件,滑动到viewController.h中,在出现的对话框中,在Connection中选择IBOutlet,在Name中输入操作名statusText,其它的不变,点击Connect.这样就创建了一个能够连接label控件的outlet。可以通过statusText这个outlet来对label这个控件进行操作了。当然添加了@property,就要在viewConller.m中@synthesize statusText了(我看网上别人好像@synthesize都是Xcode自动添加的,不知道我的这个需要手动添加是啥原因)。
结果如图。
添加action和outlet还有其它方法,比如先在viewController.h中输入这两行代码,然后在视图中与button和label控件连接,不过这样比较麻烦,不如本文所述方法简单。
4:添加action中的代码。也就是当控件触发action后,程序内部应该执行什么。代码如下:
- (IBAction)buttonPressed:(id)sender {
NSString *title = [sender titleForState:UIControlStateNormal];
NSString *newText = [[NSString alloc] initWithFormat:@"%@ button Pressed.",title];
statusText.text = newText;
}
简单解释下:第一行代码通过sender获取被按下按钮的标题(在请求控件的标题时需要提供控件的状态,上述代码中的状态为正常(normal),表示该控件处于活动状态,但当前并未使用)。接下来的两行代码是根据该标题创建了一个新字符串,用于设置标签的文本。有一点请记住:传递到操作方法中的参数时调用它的控件或对象。
Command+R,运行程序,效果如图: