感谢大家的关注,也给我一份动力,让我继续前进。有了自己的家庭有了孩子,过着上有老下有小的生活,能够挤出点时间学习真的很难,每天弄好孩子睡觉已经是晚上10点左右了,然后再弄自己的事情,一转眼很快就到12点了,就要去睡了,现在身体汤不牢啊,如果不早点睡,第二天上班肯定没精神,要靠红牛了,呵呵,在这样的情况下再挤出时间学习ios真的很困难,只能是见缝插针,抓紧一切可用的时间学习,时间,挤一挤总归是有的,只是多少问题。

这几天看来书的第三章,主要讲了如何添加按钮,然后为按钮添加响应事件,当点击按钮后,触发按钮的响应事件,从而改变一个Label上的显示文字。如果这个放在VS里面,真的是小菜一叠,但是在ios里面,差别很大,很多东西第一次接触会很混淆,下面就一点点介绍如何创建第一个有交互的app吧。

1)创建一个新的project,选择“Single View Application”,命名为“Button Fun”,然后保存。

这里简单的解释一下什么是“Automatic Reference Counting”,简称ARC,是ios的一种垃圾回收机制,即自动释放不再使用的变量,释放内存,这个和C#中的垃圾回收有点类似,但是至于他们是如何实现的,就不是很清楚了,反正记住这个是用来自动释放变量从而腾出内存空间的就可以了,暂时这么认为吧,以后用更深入的了解,再详细描述。

2)添加2个Button和1个Label 选中project navigate中的“BIDViewController.xib”,添加Button的方法和上一篇中添加Label的方法一样,直接从Object Library里面拖就可以,在Object Library中找到“Round Rect Button” 拖2个到界面中,添加完后的效果如下 上图中,将2个button分别根据辅助线放到了屏幕的左右两边上下剧中的位置,Label放在最上面,然后将Label拉长,拉到出现辅助线的位置。

3)添加button文字,去除Label文字 在Xcode中,改变文字的方法有3种,第一种选中button,然后在Attributes Inspector中改变Title的属性值   第二种方法是直接用鼠标在button上双击,然后键入需要的文字即可(这个和VS里面有很大的不同,在VS中双击一个按钮是添加一个单击事件,而在Xcode中,则是改变button的文字,所以说是VS比较简单嘛) 第三种就是用代码改变文字。

分别将左右两个按钮的文字改成“Left”和“Right”,使用同样的方法,去除Label上的文字,并且在Attributes Inspector中将Label的文字对齐方式设置为剧中,最后的界面效果如下

4)Outlet和Action(这一小节的叙述不一定完全正确,只是本人的个人理解,如果有不对的地方,望大家能够指出,谢谢!) 这两个概念是我学习ios开发以来遇到的第一个难点,其实说难不难,就是很搞,一开始没有理解它的意思。

Outlet:简单来说就是C/C++里面的指针,指向一个对象,或者说是一个对象的引用,例如一个Label,一个Button等。在C# Winform中,我们会为每一个控件设定一个name,那么在编程时,直接使用这个name就可以对该控件进行操作,但是在ios里面,情况变得有些复杂,控件没有name,就是说你拖一个控件过来,这个控件是没有自己的name的,那么要在code中操作这个控件该怎么办呢?定义一个Outlet,然后把这个Outlet指向该控件,在code中就用这个Outlet来操作这个控件,好吧,稍稍有些复杂。

举两个Outlet的例子:

@property (weak, nonatomic) IBOutlet UILabel *statusText;

以上仅仅是一个Outlet的定义,说明这个Outlet会指向一个Label控件,但是并没有说明指向哪一个Label。

@property (weak, nonatomic) IBOutlet UIButton *leftButton;

同样,上面仅仅是一个Outlet的定义,说明这个Outlet会指向一个Button控件,但是并没有说明指向哪一个Button。

Action:相对于Outlet,Action应该稍微简单一点,它的作用就是定义一个事件,然后将控件和Action事件联系起来就可以。Action的例子如下:

- (IBAction)buttonPressed:(id)sender;

这个和C# Winform有点类似,C#可以单独定义事件,然后将控件和事件使用“+=”操作符联系起来就可以,虽然ios里面没有这个语法,但是也是需要联系的,联系建立起来以后,控件就可以触发这个事件了。

希望以上对Outlet和Action的简单说说明大家能够看懂,其实我自己也没有百分百搞明白,先将自己的理解写下,以后有更深入的理解后再进行补充。

5)为Button添加事件 前面说过了,要添加事件,首先要创建一个Action,然后建立联系,Xcode比较智能,可以帮我们把这2步一起进行。 a)选中project navigator中的BIDViewController.xib,显示iphone的界面。 b)选中Xcode右上角的7个按钮从左到右的第二个Show Assistant editor(快捷键:option+command+enter,菜单栏View>Assistant Editor>Show Assistant editor)

选中后的界面如下,会在iphone界面的右边出现BIDViewController.h文件,我们等会就要将button拖到这个文件里,然后进行一些相应的设置,Xcode就会自动帮我们建立控件和Action之间的联系。 接下来就是创建Action了,鼠标选中Left按钮不放,按住键盘上的control键,然后鼠标移动到右边的BIDViewController.h文件上,在@interface和@end中间放开鼠标

(此图从书上截取,所以不太清楚) 会有一个框弹出来,如下

将上面的值设置成下面的内容

首先,我们是创建一个Action,所以Connection选择Action,然后为事件命名为buttonPressed,类型为UIButton,说明是按钮事件,最后单击“Connect”按钮,完成创建。创建完成后的代码如下:(BIDViewController.h)

#import <UIKit/UIKit.h>

@interface BIDViewController : UIViewController
- (IBAction)buttonPressed:(id)sender; @end

在BIDViewController.m中会自动添加该事件的方法

- (IBAction)buttonPressed:(id)sender {
}

为Left按钮添加好Action后,再为Right按钮添加同样的事件,buttonPressed的参数sender可以区分是由哪个button触发了该事件,所以我们不必再为Right button单独的创建一个事件,直接将Right button关联到buttonPressed就可以了,关联的方法也很简单,鼠标选中Right按钮不放,按住键盘上的control键,然后鼠标移动到右边的BIDViewController.h文件的buttonPressed事件上面,然后放开鼠标,关联完成。 (此图从书上截取,所以不太清楚)

6)为Label添加Outlet 添加Outlet的方法和添加Action的方法一样,只是在弹出框的参数选择上略有区别,同样,鼠标选中Label标签,按住control,拖到BIDViewController.h文件中,放开鼠标后,一个弹出框弹出来 Connection保留默认值Outlet,Name中填写“textStatus”作为Outlet的名称,其他的选项都保留默认值即可,最后点击“Connect”按钮,Outlet创建完成。 创建完成后的代码如下:(BIDViewController.h)

@property (weak, nonatomic) IBOutlet UILabel *textStatus;

在BIDViewController.m中会自动添加@synthesize,然后在viewDidUnload方法中添加对textStatus的释放代码。(viewDidUnload方法是系统自动创建的,当该View释放时调用,即该View将不显示了,其他View要显示时,该方法会调用到。)

@synthesize textStatus;
...
...
- (void)viewDidUnload
{
[self setTextStatus:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}

至此,所有的Action和Outlet都已经添加完毕,button可以触发buttonPressed事件,textStatus指向Label,可以对Label进行操作。

7)写Code 终于要开始写代码的,真心不容易啊。在BIDViewController.m的buttonPressed方法中添加以下代码(其实也就2行而已)

- (IBAction)buttonPressed:(id)sender {
NSString *title = [sender titleForState:UIControlStateNormal];
textStatus.text = [NSString stringWithFormat:@"%@ button pressed.", title];
}

第一行:titleForState指的是按钮在某个状态时显示的title,UIControlStateNormal得到的是按钮的一般状态,即按钮没有被点击,没有获取焦点时的状态,那么titleForState:UIControlStateNormal获得的是按钮在通常状态下的title。 第二行:将title赋值给Label用于显示。 两行代码很简单易懂,没有什么难点。

8)编译运行 快捷键command+B,编译程序。 快捷键command+R,运行程序。 当然,你也可以直接点Run按钮,直接编译运行程序。

程序运行后的开始效果如下

点击Left按钮,Label显示“Left button pressed.”,点击Right按钮,Label显示“Right button pressed.”

 

至此,整个程序开发完毕!

9)感谢 整个章节学习下来,发现有很多和Visual Studio不同的地方,事件、控件引用等都有比较大的差异,有比较的学习,可能会取得更快的进步,才能学得透彻,理解的更深入。当然,这只是一个开始,下一章,要学习更多的iphone上面的控件,下章再见!

Button_Fun.zip

P.S. 这一篇学习笔记距离上一篇间隔了蛮长的时间,一是对iphone开发的不熟悉,学起来比较慢,另一方面确实是时间有限,现在估计下来,一个礼拜的写一篇记录应该是一个比较理想的计划,本人尽力争取不拖太长的时间,努力学习,谢谢各位的捧场!

从零开始学ios开发(三):第一个有交互的app的更多相关文章

  1. 从零开始学 iOS 开发的15条建议

    事情困难是事实,再困难的事还是要每天努力去做是更大的事实. 因为我是一路自学过来的,并且公认没什么天赋的前提下,进步得不算太慢,所以有很多打算从零开始的朋友会问我,该怎么学iOS开发.跟粉丝群的朋友交 ...

  2. 从零开始学ios开发(一):准备起航

    首先介绍一下自己的背景,本人09年研究生毕业,大学就不介绍了,反正是上海的一所211大学,学的是计算机科学与技术专业,学生时代,从事过ACM,没有什么太大的成就,中国的牛人是在太多,我的水平,估计连高 ...

  3. 从零开始学IOS开发

    从今天开始开一个坑,由于业务变动,要开始学习IOS开发进行IOS app开发,其实鄙人本身就是一只菜鸟加大学狗,有过两年的C#,ASP.NET MVC,微信公众平台开发经验,一只在继续努力着,从大三下 ...

  4. 从零开始学ios开发(二十):Application Settings and User Defaults(下)

    在上一篇的学习中,我们知道了如何为一个App添加它的Settings设置项,在Settings设置项中我们可以添加哪些类型的控件,这些控件都是通过一个plist来进行管理的,我们只需对plist进行修 ...

  5. 从零开始学ios开发(十七):Storyboards(上)

    在开始这章之前,先做个说明,从这篇开始,我所使用的xcode更新成了最新的版本,版本是4.6.1(4H512),如下: 大家可以打开自己电脑上的App Store,然后搜索xcode,第一个出现的就是 ...

  6. 从零开始学ios开发(四):IOS控件(1),Image View、Text Field、Keyboard

    长话短说,谢谢大家的关注,这篇写了好长时间,下面继续学习ios.我将用2到3篇的篇幅来学习iphone上的一些常用控件,包括Image View.Text Field.Keyboard.Slider等 ...

  7. 从零开始学ios开发(十一):Tab Bars和Pickers

    不好意思各位,本人休息了一个礼拜,所以这次的进度延后了,而且这次的学习的内容比较多,时间用的也比较长,文章发布的时间间隔有些长了,望各位谅解,下面继续我们的ios之旅. 这次我们主要学习的内容有2个, ...

  8. 从零开始学ios开发(八):Autorotation and Autosizing

    不好意思,这一篇间隔的时间有点长,最近实在是事情太多,耽搁了,好了,长话短说,下面继续学习ios. 这次学习的内容是Autorotation和Autosizing,Autorotation就是屏幕内容 ...

  9. 从零开始学ios开发(十三):Table Views(下)Grouped and Indexed Sections

    在前面2篇关于Table View的介绍中,我们使用的Style都是Plain,没有分组,没有index,这次学习的Table View和iphone中的通讯录很像,有一个个以字符为分割的组,最右边有 ...

随机推荐

  1. python中set和frozenset方法和区别

    set(可变集合)与frozenset(不可变集合)的区别:set无序排序且不重复,是可变的,有add(),remove()等方法.既然是可变的,所以它不存在哈希值.基本功能包括关系测试和消除重复元素 ...

  2. 保护企业的Word文档

    保护企业的Word文档 通常,我们可以对Word文件进行加密码.设置为只读.禁止复制甚至是将内容变成图片加以保护,但这仅限于个人少量文档,如果是企业每天生产大量的word文档好用这种方法就不行,今天为 ...

  3. SWFUpload使用指南

    SWFUpload是一个flash和js相结合而成的文件上传插件,其功能非常强大. SWFUpload的特点: 1.用flash进行上传,页面无刷新,且可自定义Flash按钮的样式; 2.可以在浏览器 ...

  4. Chrome 使用技巧

    阅读目录 写在前面 快速切换文件 在源代码中搜索 在源代码中快速跳转到指定的行 使用多个插入符进行选择 设备模式 设备传感仿真 格式化凌乱的js源码 颜色选择器 改变颜色格式 强制改变元素状态(方便查 ...

  5. box2d 遍历世界中 body 的方法

    大家都知道,循环遍历有很多方法,在box2d中大家普遍使用while和for循环来遍历世界,那什么时候使用for,什么时候使用while呢? 当循环中不设计body删除的时候,使用for循环,即: C ...

  6. Elasticsearch的PHP的API使用(一)

    前提:在服务器上安装Elasticsearch  (host:192.168.1.10)   http://192.168.1.10:9200?_search?pretty 1:安装PHP的Elast ...

  7. 在网页中使用H1标记的须注意的事项

    H1标签是网站排名非常重要的一个因素,因此我们一定要正确使用它. 本文为你介绍H1标签使用的七大注意事项: 1.每个页面都应该有H1标签,H1标签是每个网页不可缺少的要素. 2.使用H1标签的内容应该 ...

  8. js设计模式(11)---命令模式

    0.前言 早上好,早晨的时光总是美好的,坐在空调屋里,看着外边的蓝天白云,不停地敲击着键盘,多么美好地享受,也许屌丝就是如此容易满足. 1.什么是命令模式? 用于将一个请求封装为一个对象,从而可用不同 ...

  9. VBA添加表格

    Sub 添加表格() ' If MsgBox("要为所有表格添加列吗?", vbYesNo + vbQuestion) = vbYes Then To ActiveDocument ...

  10. Asp.net页面跳转Session丢失问题

    原本去年在做项目时,写好的一记篇博客分享给大家. Asp.net页面跳转Session丢失问题   编写人:CC阿爸 2014-4-2 l  近来在做泛微OA与公司自行开发的系统集成登录的问题.在使用 ...