從ios8之后,系統(tǒng)的彈框 UIAlertView 與 UIActionSheet 兩個并在一了起, 使用了一個新的控制器叫 UIAlertController
UIAlertController的基本使用
1.創(chuàng)建UIAlertController
Title:顯示的標(biāo)題
message:標(biāo)題底部顯示的描述信息
preferredStyle:彈框的樣式
樣式分為兩種:
UIAlertControllerStyleActionSheet:( 底部)
UIAlertControllerStyleAlert(中間)
兩種樣式分別顯示如下:
第一步:創(chuàng)建控制器
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"確定要退出嘛?" message:@“顯示的信息" preferredStyle:UIAlertControllerStyleActionSheet];
第二步:創(chuàng)建按鈕
彈框當(dāng)中的每一個按鈕分別對應(yīng)一個 UIAlertAction
UIAlertAction創(chuàng)建方式如下:
actionWithTitle:按鈕要顯示的文字
style:按鈕要顯示的樣式
樣式分為三種:
UIAlertActionStyleDefault:默認樣式,默認按鈕顏色為藍色
UIAlertActionStyleCancel:設(shè)置按鈕為取消.點擊取消是,會動退出彈框.
注意:取消樣式只能設(shè)置一個,如果有多個取消樣式,則會發(fā)生錯誤.
UIAlertActionStyleDestructive:危險操作按鈕,按鈕顏色顯示為紅公
handler:點擊按鈕時調(diào)用Block內(nèi)部代碼.
UIAlertAction *action = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"點擊了取消");
}];
UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"點擊了取消");
[self.navigationController popViewControllerAnimated:YES];
}];
第三步:添加按鈕
把創(chuàng)建的UIAlertAction添加到控制器當(dāng)中.
[alertController addAction:action];
[alertController addAction:action1];
除了添加按鈕之外,還可以添加文本框,
添加文本框的前提是UIAlertController的樣式必須得要是UIAlertControllerStyleAlert樣式.否則會直接報錯
添加文本框方法為:
[alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
textField.placeholder = @“文本框點位文字";
}];
運行效果為:
通過控制器的textFields屬性獲取添加的文本框.注意textFields它是一個數(shù)組.
UITextField *textF = alertController.textFields.lastObject;
第四步:顯示彈框.(相當(dāng)于show操作)
[self presentViewController:alertController animated:YES completion:nil];
UIAertController放置可以輸入的textField
//點擊某一cell 就出現(xiàn)警示框
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//MARK: - 點擊某一行彈框
UIAlertController * alertVc = [UIAlertController alertControllerWithTitle:@"編輯" message:@"修改個人信息" preferredStyle:UIAlertControllerStyleAlert];
//MARK: - 只有UIAlertControllerStyleAlert 這種模式可以添加文本框
if (alertVc.preferredStyle == UIAlertControllerStyleAlert) {
//添加輸入框
[alertVc addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
NSLog(@"%@---->>",textField);
self.alertTextFileContent = textField.text;
// //監(jiān)聽文本框的改變
[textField addTarget:self action:@selector(valueChange:) forControlEvents:UIControlEventEditingChanged];
//
// [[NSNotificationCenter defaultCenter] addObserver:self
// selector:@selector(textFieldDidChangeValue:)
// name:UITextFieldTextDidChangeNotification
// object:textField];
}];
}
//MARK: - 添加確定和取消
UIAlertAction * sure = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
if (indexPath.row == 0) {
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
cell.detailTextLabel.text = self.alertTextFileContent;
}
//刷新數(shù)據(jù) ,重新調(diào)用數(shù)據(jù)源的代理方法
// [self.tv_info reloadData];
// NSIndexPath * path = [NSIndexPath indexPathForRow:indexPath.row inSection:0];
//
// [self.tv_info reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationLeft];
}];
UIAlertAction * cancel = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
}];
//MARK: - 顯示警示框
[alertVc addAction:sure];
[alertVc addAction:cancel];
[self presentViewController:alertVc animated:YES completion:^{
}];
}