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

2017-03-08  本文已影响178人  名侦探_柯基

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

Demo01:加法计算器

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

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的第一响应者身份,达到隐藏键盘的效果.

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的标记

上一篇下一篇

猜你喜欢

热点阅读