感谢你们的关注,也给我一份动力,让我继续前进。有了本身的家庭有了孩子,过着上有老下有小的生活,可以挤出点时间学习真的很难,天天弄好孩子睡觉已是晚上10点左右了,而后再弄本身的事情,一转眼很快就到12点了,就要去睡了,如今身体汤不牢啊,若是不早点睡,次日上班确定没精神,要靠红牛了,呵呵,在这样的状况下再挤出时间学习ios真的很困难,只能是见缝插针,抓紧一切可用的时间学习,时间,挤一挤总归是有的,只是多少问题。ios
这几天看来书的第三章,主要讲了如何添加按钮,而后为按钮添加响应事件,当点击按钮后,触发按钮的响应事件,从而改变一个Label上的显示文字。若是这个放在VS里面,真的是小菜一叠,可是在ios里面,差异很大,不少东西第一次接触会很混淆,下面就一点点介绍如何建立第一个有交互的app吧。编程
1)建立一个新的project,选择“Single View Application”,命名为“Button Fun”,而后保存。app
这里简单的解释一下什么是“Automatic Reference Counting”,简称ARC,是ios的一种垃圾回收机制,即自动释放再也不使用的变量,释放内存,这个和C#中的垃圾回收有点相似,可是至于他们是如何实现的,就不是很清楚了,反正记住这个是用来自动释放变量从而腾出内存空间的就能够了,暂时这么认为吧,之后用更深刻的了解,再详细描述。iphone
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比较简单嘛)
第三种就是用代码改变文字。this
分别将左右两个按钮的文字改为“Left”和“Right”,使用一样的方法,去除Label上的文字,而且在Attributes Inspector中将Label的文字对齐方式设置为剧中,最后的界面效果以下 atom
4)Outlet和Action(这一小节的叙述不必定彻底正确,只是本人的我的理解,若是有不对的地方,望你们可以指出,谢谢!) 这两个概念是我学习ios开发以来遇到的第一个难点,其实说难不难,就是很搞,一开始没有理解它的意思。spa
Outlet:简单来讲就是C/C++里面的指针,指向一个对象,或者说是一个对象的引用,例如一个Label,一个Button等。在C# Winform中,咱们会为每个控件设定一个name,那么在编程时,直接使用这个name就能够对该控件进行操做,可是在ios里面,状况变得有些复杂,控件没有name,就是说你拖一个控件过来,这个控件是没有本身的name的,那么要在code中操做这个控件该怎么办呢?定义一个Outlet,而后把这个Outlet指向该控件,在code中就用这个Outlet来操做这个控件,好吧,稍稍有些复杂。3d
举两个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上面的控件,下章再见!
P.S. 这一篇学习笔记距离上一篇间隔了蛮长的时间,一是对iphone开发的不熟悉,学起来比较慢,另外一方面确实是时间有限,如今估计下来,一个礼拜的写一篇记录应该是一个比较理想的计划,本人尽力争取不拖太长的时间,努力学习,谢谢各位的捧场!