下面我们对上一篇文章进行扩展,上一篇文章是IOS开发学习笔记(二)——简单小例子
首先我们做个总结。为了实现一个简单的功能,IOS的开发步骤一般是:
- 编辑界面(xib文件);
- 对于需要操作属性和方法的控件,需要对ViewController添加一个属性,这个属性对应这个控件;
- 对于需要操作的事件添加处理方法;
- 编写事件处理事件代码;
下面我们对这个按钮点击事件增加功能:
首先我们将输入内容显示在Label中:
NSString *str = [[NSString alloc] initWithFormat:@"Hello, %@", [myTextField text]];
[myLabel setText:str];
如果需要添加按钮点击后,输入框隐藏的功能,则变为:
NSString *str = [[NSString alloc] initWithFormat:@"Hello, %@", [myTextField text]];
[myLabel setText:str];
[myTextField resignFirstResponder];
下面我们学习Picker的使用:
我们在界面中增加一个DateTimePicker,设置属性Mode为Date。
接着我们添加一个Value Changed事件,代码如下:
NSDate *date = [myDate date];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy'-'MM'-'dd'"];
NSString *dateStr = [formatter stringFromDate: date];
[myLabel setText:dateStr];
接下来我们添加一个Picker View,这个用来显示自定义的数据:
- 首先我们添加一个Picker View;
- 为了让这个View知道下面的代理是哪个对象的,我们需要关联,拖动Pick View中的dataSource和delegate到File Owner上去建立联系;
- 接下来我们需要实现Delegate。Delegate实际上相当于Java/C++中的抽象类(abstract class),当一个类实现了Delegate的时候,需要实现接口定义的部分功能,这里之所以用了部分,是因为不是所以方法都需要实现的,同时需要指出的是一个类可以实现多个Delegate。具体工作就是在代码中加上"<>"之内的内容:
@interface ViewController : UIViewController<UIPickerViewDataSource, UIPickerViewDelegate>
- 我们通过查阅这两个Delegate的帮助得知需要实现如下方法:
注意@required关键字标识的必须实现的代码:
@protocol UIPickerViewDataSource<NSObject> @required // returns the number of 'columns' to display. - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView; // returns the # of rows in each component.. - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component; @end
我们定义一个ViewController的属性,并且在viewDidLoad中初始化:
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. dataArray = [[NSArray alloc] initWithObjects:@"zhangsan", @"lisi", @"wangwu", @"zhaoliu", @"qianqi", @"zhengba", nil]; }
- 具体实现代码:
.h文件:
// return the colomns display
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
// return the item count
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component ;
// display title on each view item
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
// happens when select an item
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;
.m文件:
// return the colomns display
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
// return the item count
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return [dataArray count];
}
// display title on each view item
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [dataArray objectAtIndex:row];
}
// happens when select an item
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
UIColor *color;
switch (row) {
case 0:
color = [UIColor redColor];
break;
case 1:
color = [UIColor greenColor];
break;
case 2:
color = [UIColor blueColor];
break;
case 3:
color = [UIColor grayColor];
break;
case 4:
color = [UIColor purpleColor];
break;
default:
color = [UIColor yellowColor];
break;
}
[[self view] setBackgroundColor: color];
}