- 在iOS8中,只能用UIAlertController.而原來的UIAlertView及UIActionSheet已經(jīng)被拋棄掉了.但是如果一臺iOS 7 的手機(jī)運行到有UIAlertController的程序后,必定會崩掉.所以一般我們都要對UIAlertController進(jìn)行適配.
- 不用著急,先看完人家嘛,后面人家已經(jīng)貼出代碼了.就先看完全文唄.
- 本文將介紹UIAlertController中添加一個UIDatePicker的例子
先上圖
看完圖片的介紹,大概應(yīng)該能知道做了什么
1.首先應(yīng)該定義iOS8,以此來判斷是ios7還是ios8
#define IOS8 [[[UIDevice currentDevice]systemVersion] floatValue] >= 8.0
2.先貼出UIActionSheet的代碼
用法將在代碼的中加解釋,請注意看(寫篇文章也是不容易啊)
if (IOS8) {
UIDatePicker *datePicker = [[UIDatePicker alloc] init];
datePicker.datePickerMode = UIDatePickerModeDate;
//解釋1,是用于給UIDatePicker留出空間的,因為UIDatePicker的大小是系統(tǒng)定死的,我試過用frame來設(shè)置,當(dāng)然是沒有效果的.
//還有就是UIAlertControllerStyleActionSheet是用來設(shè)置ActionSheet還是alert的
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"\n\n\n\n\n\n\n\n\n\n\n\n" message:nil preferredStyle:UIAlertControllerStyleActionSheet];
//增加子控件--直接添加到alert的view上面
[alert.view addSubview:datePicker];
//解釋2: handler是一個block,當(dāng)點擊ok這個按鈕的時候,就會調(diào)用handler里面的代碼.
UIAlertAction *ok = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init];
//實例化一個NSDateFormatter對象
[dateFormat setDateFormat:@"yyyy-MM-dd"];//設(shè)定時間格式
NSString *dateString = [dateFormat stringFromDate:datePicker.date];
//求出當(dāng)天的時間字符串
NSLog(@"%@",dateString);
}];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
}];
[alert addAction:ok];//添加按鈕
[alert addAction:cancel];//添加按鈕
//以modal的形式
[self presentViewController:alert animated:YES completion:^{ }];
}else{
//當(dāng)在ios7上面運行的時候,
UIDatePicker *datePicker = [[UIDatePicker alloc] init];
datePicker.datePickerMode = UIDatePickerModeDate;
//[datePicker addTarget:self action:@selector(timeChange:) forControlEvents:UIControlEventValueChanged];
datePicker7 = datePicker;
UIActionSheet* startsheet = [[UIActionSheet alloc] initWithTitle:@"\n\n\n\n\n\n\n\n\n\n\n\n"
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:@"確定",
@"取消", nil];
startsheet.tag = 333;
//添加子控件的方式也是直接添加
[startsheet addSubview:datePicker];
[startsheet showInView:self.view];
}
總結(jié)區(qū)別:
- 在iOS8中,按鈕的點擊事件都在初始化的時候給設(shè)置了.而在ios7中,則要設(shè)置代理,
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
以此來判斷按的時哪個按鈕,每個按鈕要做什么事情都要在這里面設(shè)置.這無疑iOS8在這點上就更加方便明了,可讀性更高一些了. - actionSheet的添加子控件的方式iOS8:[alert.view addSubview:子控件];
ios7: [startsheet addSubview:子控件];雖然方式有點不一樣,但是都比較簡單,比較爽.
3.UIAlertView的代碼
if(IOS8){//如果是iOS8
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"什么鬼" message:@"\n\n" preferredStyle:UIAlertControllerStyleAlert];
//這里就可以設(shè)置子控件的frame,但是alert的frame不可以設(shè)置
UITextField * text = [[UITextField alloc] initWithFrame:CGRectMake(15, 64, 240, 30)];//wight = 270;
text.borderStyle = UITextBorderStyleRoundedRect;//設(shè)置邊框的樣式
//添加子控件也是直接add,爽
[alert.view addSubview:text];
//這跟 actionSheet有點類似了,因為都是UIAlertController里面的嘛
UIAlertAction *ok = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
NSLog(@"%@",text.text);//控制臺中打印出輸入的內(nèi)容
}];
UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
}];
//添加按鈕
[alert addAction:ok];
[alert addAction:cancel];
//以modal的方式來彈出
[self presentViewController:alert animated:YES completion:^{ }];
}else{//如果是ios7的話
if (customAlertView==nil) {
customAlertView = [[UIAlertView alloc] initWithTitle:@"xixi" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil];
}
[customAlertView setAlertViewStyle:UIAlertViewStylePlainTextInput];
UITextField *nameField = [customAlertView textFieldAtIndex:0];
nameField.placeholder = @"請輸入一個名稱";
[customAlertView show];
}
AlertView總結(jié)區(qū)別:
- iOS8的alertview在中間,而ios7的是偏上一點的.
- iOS8中的alertView可以加其他的控件,但是ios7上面只能加文本輸入框(兩種,有密碼和非密碼的輸入框)
但是兩種方法顯然還是有些不一樣的.那么如果才能做得一樣呢.下面提供一種思路
- 最好就是自定義一個UIView,然后像鍵盤一樣隱藏在最下面,當(dāng)需要彈框的時候,就直接移上來.如果需要全屏顯示,而又有UINavigation的話,就可以modal一個控制器或者在window上加一個UIView
[[UIApplication sharedApplication].keyWindow addSubview:<#(UIView *)view#>]
- 這種方式在demo中也是有的,只是做了個大概,有基礎(chǔ)的朋友一定明白了的.
如果還有需要請到guihit上下載https://github.com/ouzhenxuan/UIAlertControllers
如果你覺得demo對你有用,請不要手下留情,拼命在guihub上點star(贊)吧.當(dāng)然簡書上也是很歡迎的.