代码改变世界

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,运行程序,效果如图: