初探第一响应者/Frame+按钮添加点击事件

作为一个初学者,我们无法立即“认识”一个事物的本质,只能去“感知”它.
只有当对事物的认知以一种更高的形式存在的时候,我们才能脱离“感知”,真正的“认识”它.
如上所述,视觉上的感知是我们接触iOS的最好的切入点.

  • 问:什么是UI?
    答:User Interface,用户界面,用来显示内容或者作为容器储存其他UI.我们在手机上看得到的都是UI.

  • 问:谁来管理UI?
    答:Controller-控制器.控制器作为UI的灵魂,它负责管理UI的生命周期(创建/添加/销毁等),监听并响应用户与UI之间的交互.

Demo01:加法计算器

  • 我们采用storyboard与代码结合的方式来理解这个Demo:storyboard负责界面布局,代码负责逻辑实现.

1.在Main.storyboard中拖入UI控件:

  • TestField 监听用户输入数字
    属性:Placeholder 负责在用户输入之前显示提示信息,占位.
    Keyboard Type 设置弹出键盘的类型(数字键盘,全键盘等)

  • Label 负责显示文本,比如本个Demo的加号,等号和计算结果
    属性:Font 字体大小
    Lines 文字行数(如果设置为0,表示自动换行)
    Alignment 文字对齐方式

  • Button 点击计算/清空内容
    属性:根据State Config来设置

Snip20170307_19.png

2.关联storyboard和Controller
Command+option+enter 打开辅助编译器
Command+enter 关闭辅助编译器
按住control建立storyboard和Controller的联系

Snip20170307_22.png

3.代码实现计算逻辑
通过连线创建属性

@interface ViewController ()
//创建属性
@property (weak, nonatomic) IBOutlet UITextField *textNum1;
@property (weak, nonatomic) IBOutlet UITextField *textNum2;
@property (weak, nonatomic) IBOutlet UILabel *labelText;
@end

通过连线创建按钮的点击事件

- (IBAction)calculator:(UIButton *)sender {
    //记录TextField数字并计算结果
    int n1=[self.textNum1.text intValue];
    int n2=[self.textNum2.text intValue];
    int sum=n1+n2;
    //修改label
    self.labelText.text=[NSString stringWithFormat:@"%d",sum];
    //撤销第一拥有者身份 隐藏键盘
    [self.textNum1 resignFirstResponder];
    [self.textNum2 resignFirstResponder];
}

- (IBAction)removeAll:(UIButton *)sender {
    //清空
    self.textNum1.text=@"";
    self.textNum2.text=@"";
    self.labelText.text=@"0";
    //隐藏键盘
    [self.view endEditing:YES];
}

总结:

至此,我们的第一个Demo计算器就完成了,期间我们接触到了一个新名词:第一响应者.

问:什么是第一响应者
答:当前响应用户触摸的屏幕上的对象,在APP生命周期内,First Responder负责用户与UI之间的交互.用户触摸TextField的时候,它就变成了第一响应者,并且成为活动的文本区域(可以输入).

  • 问:撤销第一响应者
    答:我用了两种方法
[self.textNum1 resignFirstResponder];

[self.view endEditing:YES];

都可以用来撤销TextField的第一响应者身份,达到隐藏键盘的效果.

  • 问:连线的属性为什么不放到.h中?
    答:放入延展类,防止外部对象访问,达到私有化效果

  • 问:连线方法为什么不放到类扩展中?
    答:没有必要声明方法

  • 问:什么是IBOutlet和IBAction?
    答:IBOutlet表示连线的是一个属性
    IBAction表示连线的是一个方法

  • 问:控件为什么用weak修饰?
    答:weak表示弱引用,相关内容在UI基础-02中详细解答

Tips:
1.删除方法的时候,一定要把storyboard中的连线删除
2.快捷键:
显示/隐藏左侧导航区域 Command+0
显示/隐藏右侧实用工具栏Command+option+0
打开/关闭辅助编译器
打开 Command+option+enter
关闭 Command+enter
查找头文件 shift+Command+o
离线文档 shift+Command+0

Demo02:小飞机

点击方向键,让小飞机移动

plane.gif

1.设置界面

- (void)viewDidLoad {
    [super viewDidLoad];
    //设置背景
    UIImageView *backgroundImage=[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.height)];
    //创建UIImage
    UIImage *image=[UIImage imageNamed:@"background"];
    //修改属性
    backgroundImage.image=image;
    //添加到屏幕上
    [self.view addSubview:backgroundImage];
    
    //2.设置小飞机
    UIButton *plane=[[UIButton alloc]initWithFrame:CGRectMake(0, 0, 48,48)];
    self.button=plane;
    plane.center=CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2);
    [plane setBackgroundImage:[UIImage imageNamed:@"hero2"] forState:UIControlStateNormal];
    [plane setBackgroundImage:[UIImage imageNamed:@"hero1"] forState:UIControlStateHighlighted];
    [self.view addSubview:plane];
    
    //3.添加方向键
    UIButton *arrow=[[UIButton alloc] initWithFrame:CGRectMake(100, 100, 48,48)];
    [arrow setBackgroundImage:[UIImage imageNamed:@"top_normal"] forState:UIControlStateNormal];
    [arrow setBackgroundImage:[UIImage imageNamed:@"top_highlighted"]  forState:UIControlStateHighlighted];
    [self.view arrow];
    
    //添加按钮的监听
    [arrow addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];
    
}

2.实现按钮的点击事件

-(void)clickButton:(UIButton *)button{
    CGRect tempFrame=self.button.frame;
    tempFrame.origin.y-=10;
    self.button.frame=tempFrame;
}

Tips
1.按钮的状态和相关设置:
Default:默认
Highlighted:被点击高亮
Selected:id类型的Sender就是表示按钮本身,按钮selected属性,默认为No,修改为YES表示被选中,isSelected属性判断是否被选中
Disable:enabled属性,默认值为YES,可以接收用户点击事件,修改为NO,不可以接收用户点击事件,isEnabled判断是否能够点击

background image和image:
设置background image和title:background image在底层,title在图片上层
设置image和title:image在左侧,title在右侧(默认状态,可以通过offset修改位置)
设置background image:图片按照按钮尺寸
设置按钮的image:按钮按照图片尺寸

按钮使用注意:image/backgroundimage/title,一定要分状态设置

2.OC中的坐标系
我们以这个项目为例

Snip20170317_16.png

frame:表示子view在父view的位置
center:子view中心在父view的位置,根据frame确定
bounds:view相对于自身,左上角为坐标原点,根据frame确定

修改frame:不能直接修改对象结构体中的内容
基本实现:获取对象的frame赋值给临时frame-修改临时frame-给frame赋值

CGRect tempFrame=self.OBJect.frame;
CGRect tempFrame=self.OBJect.frame;
self.NSObject.frame=tempFrame;

3.UIView的Tag:view的标记

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容