-----------Java培训、Android培训、IOS培训、.Net培训、期待与您交流!------------ 

本节采用代码的方式系统了解一下IOS主要UI控件的创建和使用,在开始之前首先要创建一个新的单页面IOS工程,这里我们的项目名称为baseUIs,将平台设置为ipad2(屏幕大),设置Main.storyboard中的主view的尺寸为iPad Full Screen。

1、屏幕布局
ipad2的屏幕分辨率为1024x768,为了合理使用界面,我们首先计划一下各个UI控件的摆放,我们假设每排放3个控件,计划放4排,采用如下的方式来摆放,这种方式要求我们通过UI空间的中心点来定位(另一种是通过左上角定位)。

我们首先在控制器头文件中采用宏定义的方式来定义这些坐标点,假设横排采用A、B、C、D命名,竖排采用1、2、3命名,命名如下:

#define A1 CGPointMake(192, 100)
#define A2 CGPointMake(384, 100)
#define A3 CGPointMake(576, 100)#define B1 CGPointMake(192, 300)
#define B2 CGPointMake(384, 300)
#define B3 CGPointMake(576, 300)#define C1 CGPointMake(192, 500)
#define C2 CGPointMake(384, 500)
#define C3 CGPointMake(576, 500)#define D1 CGPointMake(192, 700)
#define D2 CGPointMake(384, 700)
#define D3 CGPointMake(576, 700)

2、UIButton 控件
UIButton按钮控件可以响应用户的点击事件,为了验证这种响应事件的控件,我们首先要在控制器类里声明和实现一个用来检测事件触发的方法,实现如下:
- (void)testWithTarget:(id)target{NSLog(@"%@ calls this method",[target class]);
}
该方法可以响应点各种事件,并能访问事件源对象。
我们采用代码的方式来创建本节的所有控件,这些代码需要创建在ViewController的ViewDidLoad方法内(可以保证在控制器加载的时候运行),UIButton按钮控件的代码创建如下:
#pragma mark -- UIButton按钮// 实例创建UIButton *newButton = [UIButton new];// 框架设置newButton.frame = CGRectMake(0, 0, 100, 100);newButton.center = A1;// 背景颜色newButton.backgroundColor=[UIColor lightGrayColor];// 按钮文字[newButton setTitle:@"ClickMe" forState:UIControlStateNormal];[newButton setTitle:@"Clicked" forState:UIControlStateHighlighted];// 文字颜色[newButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];[newButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];// 按钮图片[newButton setBackgroundImage:[UIImage imageNamed:@"01_btn_image1.png"] forState:UIControlStateNormal];[newButton setBackgroundImage:[UIImage imageNamed:@"01_btn_image2.png"] forState:UIControlStateHighlighted];// 监听设置[newButton addTarget:self action:@selector(testWithTarget:) forControlEvents:UIControlEventTouchUpInside];// 按钮添加[self.view addSubview:newButton];

该按钮控件需要调用两个用户自己定义的图片资源,我们需要加载到我们的项目,图片资源如下:

3、UILabel 控件
UILabel标签控件用来在屏幕上显示文本提示信息,文本信息是可以改变的,需要注意的是他也可以响应用户点击动作,但是没按钮的效果丰富,代码如下:
#pragma mark -- Label标签// 实例创建UILabel *newLabel=[UILabel new];// 框架设置newLabel.frame=CGRectMake(50, 100, 200, 100);newLabel.center = A2;// 标签文本newLabel.text=@"This is a label!";newLabel.tintColor=[UIColor redColor];// 标签背景颜色newLabel.backgroundColor=[UIColor lightGrayColor];// 自动换行newLabel.numberOfLines=0;// 标签添加[self.view addSubview:newLabel];

4、UITextField 控件

UITextField文本控件用于用户输入数据,他在掌上产品是和虚拟键盘相关联的,一个控制器如果包含文本控件,需要遵守<UITextFieldDelegate>协议,该协议的方法全部为可选,我们在控制器的实现里实现他的方法:
#pragma mark - UITextFieldDelegate
// 检测文本变动
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{NSLog(@"%@ shouldChangeCharactersInRange:{%d - %d}, replacementString:%@", textField.class, range.location, range.length, string);return YES;
};
// 监听编辑操作
- (void)textFieldDidBeginEditing:(UITextField *)textField{NSLog(@"%@ textFieldDidBeginEditing", textField.class);
}
// 监听编辑结束
- (void)textFieldDidEndEditing:(UITextField *)textField{NSLog(@"%@ textFieldDidEndEditing", textField.class);
}
// 编辑之前执行的操作
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{NSLog(@"%@ textFieldShouldBeginEditing", textField.class);return YES;
}
// 清空之前执行
- (BOOL)textFieldShouldClear:(UITextField *)textField{NSLog(@"%@ textFieldShouldClear", textField.class);return YES;
}
// 编辑完成前执行
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{NSLog(@"%@ textFieldShouldEndEditing", textField.class);return YES;
}
// 回车键方法(主要用在iphone,在ipad中有隐去键盘键)
- (BOOL)textFieldShouldReturn:(UITextField *)textField{// 放弃焦点,隐藏键盘[textField resignFirstResponder];return YES;
}
接下来就可以通过代码来创建文本控件:
#pragma mark -- UITextFeild文本框// 文本框实例化UITextField *newTextField = [UITextField new];// 框架设置newTextField.frame = CGRectMake(0, 0, 150, 70);newTextField.center = A3;// 样式newTextField.borderStyle = UITextBorderStyleBezel;// 文字提示newTextField.placeholder = @"Insert some text!";// 清除按钮newTextField.clearButtonMode = UITextFieldViewModeWhileEditing;// 键盘样式newTextField.keyboardType = UIKeyboardTypeDefault;newTextField.returnKeyType = UIReturnKeyDone;// 代理设置newTextField.delegate=self;// 文本框添加[self.view addSubview:newTextField];

5、UITextView 控件

UITextView编辑框用来编辑一个文本片段,也可以实现图文效果,和文本框的简单输入有很大区别,我们也需要遵守一个<UITextFieldDelegate>协议来响应文本编辑框的各种操作,我们在控制器内实现他的方法:
#pragma mark - UITextViewDelegate
// 文本变化
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{NSLog(@"%@ shouldChangeCharactersInRange:{%d - %d}, replacementString:%@", textView.class, range.location, range.length, text);return YES;
}
// 导入富文本(图文)
- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange{NSLog(@"%@ shouldInteractWithTextAttachment:%@, inRange:{%d - %d} ",textView.class, textAttachment, characterRange.location, characterRange.length);return YES;
}
// 网络导入数据
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange{return YES;
}
// 开始编辑时执行
- (void)textViewDidBeginEditing:(UITextView *)textView{NSLog(@"%@ textViewDidBeginEditing", textView.class);
}
// 文本变化监听
- (void)textViewDidChange:(UITextView *)textView{NSLog(@"%@ textViewDidChange", textView.class);
}
// 文本选择变更
- (void)textViewDidChangeSelection:(UITextView *)textView{NSLog(@"%@ textViewDidChangeSelection", textView.class);
}
// 编辑结束触发
- (void)textViewDidEndEditing:(UITextView *)textView{NSLog(@"%@ textViewDidEndEditing", textView.class);
}
// 编辑前预处理
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView{NSLog(@"%@ textViewShouldBeginEditing", textView.class);return YES;
}
// 编辑结束预处理
- (BOOL)textViewShouldEndEditing:(UITextView *)textView{NSLog(@"%@ textViewShouldEndEditing", textView.class);return YES;
}

代码创建文本编辑框:

#pragma mark -- UITextView文本区域// 文本创建UITextView *newTextView = [UITextView new];newTextView.frame = CGRectMake(0, 0, 200, 200);newTextView.center = B1;// 文本样式newTextView.backgroundColor = [UIColor lightGrayColor];// 文字样式newTextView.font = [UIFont fontWithName:@"Arial" size:20];newTextView.textColor = [UIColor purpleColor];// 文字内容newTextView.text = @"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.";// 键盘样式newTextView.keyboardType = UIKeyboardTypeDefault;// 设置代理newTextView.delegate = self;// 添加文本[self.view addSubview:newTextView];

6、UIImage 控件

这个控件可以用来装载一个图片,具体实现代码如下:
#pragma mark -- UIImageView图片框// 图片框创建UIImageView *newImageView = [UIImageView new];newImageView.frame = CGRectMake(0, 0, 100, 200);newImageView.center = B2;// 加载图片newImageView.image = [UIImage imageNamed:@"02_image.jpg"];// 图片样式newImageView.contentMode = UIViewContentModeScaleAspectFill;// 图片框添加[self.view addSubview:newImageView];

在这里使用到了一个图片资源,他的使用方法和按钮图片的使用方法一样,放在工程中即可。


7、UISlider 控件
这是一个滑块控件,我们人为的设置他的最大值和最小值,通过上面的滑块在最大值和最小值之间拖拽,可以连续触发事件,通过该对象事件可以取得滑块当前的数值,他的实现如下:
#pragma mark -- UISlider滑块// 滑块创建UISlider *newSlider = [UISlider new];newSlider.frame = CGRectMake(0, 0, 100, 30);newSlider.center = B3;// 数值范围newSlider.minimumValue = 0;newSlider.maximumValue = 9;// 监听滑块[newSlider addTarget:self action:@selector(testWithTarget:) forControlEvents:UIControlEventValueChanged];// 添加滑块[self.view addSubview:newSlider];

8、UISwitch 控件

开关控件,类似我们的电灯开关,他有两个状态,on和off,点击他,状态改变,同时触发事件,在事件中,可以直接通过该对象的isOn属性来得到他的当前状态。他的实现如下:
#pragma mark -- UISwitch开关// 开关创建UISwitch *newSwitch = [UISwitch new];newSwitch.center = C1;// 开关样式newSwitch.thumbTintColor = [UIColor purpleColor];newSwitch.tintColor = [UIColor redColor];// 监听开关[newSwitch addTarget:self action:@selector(testWithTarget:) forControlEvents:UIControlEventValueChanged];// 添加开关[self.view addSubview:newSwitch];

9.UISegmentControl 控件

分段控制器,他由多个可以点击的小按钮组成,这些按钮同时只有一个处于按下的状态,我们点击任一个小按钮,都会触发事件,通过该控件的selectedSegmentIndex属性可以获取分段控制器的当前状态。实现如下:
#pragma mark -- UISegmentedControl分段控制器// 实例创建UISegmentedControl *newSegment = [UISegmentedControl new];// 框架设置newSegment.frame = CGRectMake(0, 0, 150, 50);newSegment.center = C2;// 内容添加[newSegment insertSegmentWithTitle:@"Seg3" atIndex:0 animated:NO];[newSegment insertSegmentWithTitle:@"Seg2" atIndex:0 animated:NO];[newSegment insertSegmentWithTitle:@"Seg1" atIndex:0 animated:NO];[newSegment insertSegmentWithTitle:@"Seg0" atIndex:0 animated:NO];// 样式设置newSegment.backgroundColor = [UIColor blackColor];newSegment.tintColor = [UIColor lightGrayColor];// 初始位置newSegment.selectedSegmentIndex = 0;// 监听设置[newSegment addTarget:self action:@selector(testWithTarget:) forControlEvents:UIControlEventValueChanged];// 添加到视图[self.view addSubview:newSegment];
10、项目完善
在前面所用的事件监听,我们都在使用testWithTarget方法,为了区别开来,便于学习,我们把该方法修正一下:
- (void)testWithTarget:(id)target{Class class = [target class];// 根据不同对象输出不同的参数if (class == [UIButton class]) {NSLog(@"%@ calls this method", class);}else if (class == [UISlider class]){NSLog(@"%@ calls this method, currentValue: %f", class, [(UISlider*)target value]);}else if (class == [UISegmentedControl class]){NSLog(@"%@ calls this method, selectedSegmentIndex: %d", class, [(UISegmentedControl*)target selectedSegmentIndex]);}else if(class == [UISwitch class]){NSLog(@"%@ calls this method, currentState: %d", class, [(UISwitch*)target isOn]);}}

现在我们可以执行查看运行效果,并通过界面操作来熟悉各种事件监听的机制(包括代理方法的响应),这些方法都会将调用信息反馈到调试窗口中,程序的最终运行效果如下:

操作按钮、滑块等,会在调试窗口指示调试信息,在这里不做演示。

selectedSegmentIndex

-----------Java培训、Android培训、IOS培训、.Net培训、期待与您交流!------------ 

黑马程序员——IOS学习—基本UI控件的代码创建相关推荐

  1. 黑马程序员——iOS学习——启动App界面黑屏

    之前自己跟着书上学习,书上会有示例程序. 其中有些示例程序,要求创建一个Empty Application,可是由于书中使用的Xcode版本低些,而我使用了最新的Xcode,根本找不到Empty Ap ...

  2. 黑马程序员- IOS学习笔记-OC三大特性

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 封装 set方法 1.作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行相应过滤 ...

  3. 黑马程序员-IOS学习笔记 99乘法表 打印

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流!------- 以前面试也遇到过,其实代码很少~~~ void print99(){ for(int i=1;i& ...

  4. 【C++】黑马程序员 C++学习课程—C++核心编程

    [C++]黑马程序员 C++学习课程-C++核心编程 黑马程序员 C++学习课件, 为自用版本,单纯为了学习和查找资料更加方便 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓 ...

  5. 2022黑马程序员-前端学习第一阶段(Day01-HTML的认知)

    HTML的认知-Day01 学习笔记打卡 HTML认知 基础概念铺垫(了解) 认识网页 五大浏览器和渲染引擎 Web标准(了解) HTML初体验 HTML的感知 HTML骨架结构 开发工具的使用 语法 ...

  6. 黑马程序员Maven学习笔记

    前言 这里是黑马程序员Maven学习笔记分享,这是视频链接. 我还有其它前端内容的笔记,有需要可以查看. 文章目录 前言 基础 Maven简介 Maven是什么 Maven的作用 Maven的下载 M ...

  7. 黑马程序员-iOS基础-Objective-C基础(六)内存管理

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序员-iOS基础-Objective-C基础(六)内存管理 一.内存管理的必要性 移动设备 ...

  8. IOS学习之UISwitch控件两种使用方法和监听

    IOS学习之UISwitch控件两种使用方法和监听 分类: IOS开发入门2012-06-15 11:48 1363人阅读 评论(0) 收藏 举报 一.第一种创建UISwitch控件的方法,在代码中动 ...

  9. 黑马程序员——ios笔试题——黑马 IOS 技术博客

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 面试能力要求:精通iphone的UI开发,能熟练操作复杂表视图,熟练使用图层技术, 可以自定义U ...

最新文章

  1. 机器学习获量子加速!物理学家与计算科学家「自然联姻」
  2. Cracking the coding interview--Q1.7
  3. SpringBoot+tomcat+web
  4. spring源码学习一
  5. 上拉电阻和下拉电阻的作用详解
  6. TypeError: only integer scalar arrays can be converted to a scalar index一例
  7. 初识react(二) 实现一个简版的html+redux.js的demo
  8. 计算机无法备份,电脑无法备份怎么办
  9. 退出登入的php怎么写,php中退出登录怎么写
  10. Rust: map中的问题,两种写法有什么不同?
  11. Struts2+Spring3+MyBatis3整合以及Spring注解开发
  12. html5在线聊天模板,h5聊天室模板|仿微信聊天室html5
  13. R语言 循环 步长 写法
  14. 照片模糊怎么变清晰?不如试试这两个方法
  15. 俞敏洪:35岁前如何实现自我增值?
  16. IQE 和 Porotech 合作开发 MicroLED
  17. 调用腾讯会议API创建会议
  18. 【区块链】读懂拜占庭将军问题
  19. 自己动手制作安卓动态壁纸教程
  20. CS4344/45/46/48

热门文章

  1. 面试题(有部分答案)
  2. php nts,wamp 环境中的nts php 配置方式
  3. P15 Collections
  4. pycharm 明明解释器里已经下载了sklearn,但还是显示找不到sklearn解决办法
  5. 女生适合学数据分析吗
  6. 一分钟实现内网穿透(ngrok服务器搭建)
  7. 互联网医疗行业PEST分析实践
  8. html5响应式前端设计,15个最新的响应式设计前端框架
  9. iPhone 隐私新规下的“大地震”:四大平台损失近百亿美元,“连用户是男是女都分不清!”...
  10. elasticsearch 实践