最近学的四个控件UIAlertView,UIActionSheet,UIDatePicker,UIPickerView的使用总结部分。
一、UIAlertView部分
参考资料:http://my.oschina.net/u/2340880/blog/408873?p=1
效果就是弹出一个提示框(警告框),可以设置提示消息的内容,标题,按键数量等等。一般来说放在button的点击事件里会比较好?算是比较简单的一个控件嗯
初始化:
- (instancetype)initWithTitle:(NSString *)title message:(NSString*)message delegate:(id /*<UIAlertViewDelegate>*/)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles,...;
通过这个方法来设置标题,代理,取消按钮标题(按了使提示框消失),以及其他按钮的标题。
按钮数量多的场合,会排列成类似UITableView的样式
显示提示框:
UIAlertView *alert = [[UIAlertView alloc] init];
[alert show];
需要关注的还有UIAlertViewDelegate中的关于按钮点击事件的方法:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex;
通过这方法可以设置点击第几个按钮时实现的效果。其他的有关内容参考上面的网页嗯。
二、UIActionSheet部分
参考资料:http://blog.csdn.net/totogo2010/article/details/7618891
效果为从底部出现的一列按钮,并且可以为其添加各自的按钮事件。
初始化方式与AlertView类似
UIActionSheet *actSheet = [[UIActionSheet alloc]initWithTitle:@"任务8的actionSheet" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"这是确定" otherButtonTitles:@"按钮1",@"按钮2",@"按钮233", nil];
按钮的最后一个title需要为nil
之后使用
[actSheet showInView:view ];
的方式使其显示。
设置按钮点击事件需要先添加协议UIActionSheetDelegate,设置的方式也和AlertView类似,
(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0) {
//确定按钮
}else if (buttonIndex == 1) {
//第一个按钮
}else if(buttonIndex == 2) {
//第二个按钮
}else if(buttonIndex == 3) {
//取消按钮
}
用这样的方法就能为其中的按钮添加事件了。
三、UIDatePicker部分
参考资料:http://justcoding.iteye.com/blog/1473352
一个日期选择器,其实就是一个系统自带的已经做好了的PickerView,但它是一个UIControl的子类,专门接受各种时间相关的输入。
UIDatePickerModeTime, // 只选择时间
UIDatePickerModeDate, // 只选择日期
UIDatePickerModeDateAndTime, // 同时选择日期和时间
UIDatePickerModeCountDownTimer // 选择小时和分钟(类似选择倒计时)
} UIDatePickerMode;
(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
设置每一行中具体显示的数据:
(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
这样设置完毕后,一个单列/多列选择的选择器就完成了。可以实现基本的展示功能,但是因为每列间一般还会有分级的关系,可以通过以下方法来设置转动某一列时的事件。下面这部分直接复制【省/市/区】选择器中的这部分内容
(void)pickerView:(UIPickerView *)pickerView
didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
if (component == 0) {
NSInteger *selectedProvince = [pickerView selectedRowInComponent:0];
cityArr = [[provinceArr objectAtIndex:selectedProvince]objectForKey:@"sub"];
[pickerView selectRow:0 inComponent:1 animated:NO];
[pickerView selectRow:0 inComponent:2 animated:NO];
//转动时把第二列和第三列选择列数重置为0,否则容易出现数组越界
NSInteger *selectedCity = [pickerView selectedRowInComponent:1];
//读取第二列中选择的行数
areaArr = [[cityArr objectAtIndex:selectedCity]objectForKey:@"sub"];
[pickerView reloadComponent:1];
[pickerView reloadComponent:2];
} if(component == 1) {
[pickerView selectRow:0 inComponent:2 animated:NO];
NSInteger *seletedCity = [pickerView selectedRowInComponent:1];
areaArr = [[cityArr objectAtIndex:seletedCity]objectForKey:@"sub"];
[pickerView reloadComponent:2];
}
}// 每列转动后的反应
以后涉及到数组的场合都要注意这样的问题。