在系統(tǒng)彈框中UIAlertView
是一個(gè)比較古老的類,現(xiàn)在已經(jīng)被廢棄,但是還能使用.我們看一下效果就行.
UIAlertView.以及對(duì)應(yīng)結(jié)果;(過(guò)期)
這個(gè)效果會(huì)出現(xiàn)在屏幕中間.
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"人民幣" message:@"6.65" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定",@"A",@"B", nil];
alertView.alertViewStyle = UIAlertViewStyleSecureTextInput;
[alertView show];
}
效果圖如下:
UIActionSheet 以及對(duì)應(yīng)結(jié)果;(過(guò)期)
這是一個(gè)在底部的效果,彈窗會(huì)在手機(jī)屏幕底部顯示:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
//destructive 破壞,爆炸: 描述按鈕 ,警告
UIActionSheet *sheet = [[UIActionSheet alloc]initWithTitle:@"操作提示" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"中獎(jiǎng)了" otherButtonTitles:@"A",@"B", nil];
[sheet showInView:self.view];
}
效果圖如下:
UIActionSheet
和UIAlertView
在點(diǎn)擊選項(xiàng)的時(shí)候,可以調(diào)用它的代理,還處理點(diǎn)擊事件.
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex NS_DEPRECATED_IOS(2_0, 9_0);
UIAlertController
但是是畢竟已經(jīng)過(guò)期了,不能再使用了,我們還是把重點(diǎn)放在新的彈框UIAlertController
上吧,這是一個(gè)新的類,在iOS8.0之后才有的一個(gè)類,如果你的項(xiàng)目還在兼容古老的iOS7,那就要做一個(gè)判斷了,在iOS7上不支持這個(gè)類,會(huì)crash掉的.
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
UIAlertController *alertVc = [UIAlertController alertControllerWithTitle:@"標(biāo)題" message:@"內(nèi)容" preferredStyle:UIAlertControllerStyleActionSheet];
//默認(rèn)只有標(biāo)題 沒(méi)有操作的按鈕:添加操作的按鈕 UIAlertAction
UIAlertAction *cancelBtn = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"取消");
}];
//添加確定
UIAlertAction *sureBtn = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"確定");
}];
//設(shè)置`確定`按鈕的顏色
[sureBtn setValue:[UIColor redColor] forKey:@"titleTextColor"];
//將action添加到控制器
[alertVc addAction:cancelBtn];
[alertVc addAction :sureBtn];
//展示
[self presentViewController:alertVc animated:YES completion:nil];
}
在創(chuàng)建UIAlertController
的時(shí)候,最后的UIAlertControllerStyle
參數(shù)是一個(gè)枚舉,UIAlertControllerStyleActionSheet
表示在中間彈出彈框,UIAlertControllerStyleAlert
表示在屏幕底部彈出彈框.
我們?cè)俳oUIAlertController
添加UIAlertAction
的時(shí)候,UIAlertController
會(huì)有一個(gè)Block
會(huì)有一個(gè)回調(diào),可以把,該UIAlertAction
的點(diǎn)擊事件寫在這里面.
特殊的彈窗
在有的時(shí)候我們需要在項(xiàng)目中的彈框里加一個(gè)輸入框,用來(lái)輸入驗(yàn)證碼或者電話號(hào)碼等等.
可以用系統(tǒng)的方法,添加一個(gè)或多個(gè)輸入框:addTextFieldWithConfigurationHandler
,這個(gè)方法也有一個(gè)Block
回調(diào),但里面可以拿到添加的TextField
,然后可以對(duì)這個(gè)TextField
進(jìn)行一些設(shè)置,比如添加placeholder
,設(shè)置字體大小,等等.
//添加確定
UIAlertAction *sureBtn = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
UITextField *txt = [alertVc.textFields objectAtIndex:0];
NSLog(@"%@",txt.text);
}];
[alertVc addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
textField.placeholder = @"請(qǐng)輸入賬號(hào)";
}];
[alertVc addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
textField.placeholder = @"請(qǐng)輸入密碼";
}];
文本設(shè)置
這些基本能滿足我們?nèi)粘P枰?但是個(gè)別的的時(shí)候,我們?cè)亠@示的時(shí)候需要對(duì)彈窗內(nèi)容進(jìn)行簡(jiǎn)單的設(shè)置,比如:行間距,文字顏色,等等.
NSString *content = @"在這里寫上需要彈出顯示并需要做格式處理的文本內(nèi)容";
NSMutableAttributedString *alertControllerMessageStr = [[NSMutableAttributedString alloc] initWithString: content];
NSInteger length = [content length];
[alertControllerMessageStr addAttribute:NSForegroundColorAttributeName value:kColorHex(0x030303) range:NSMakeRange(0, length)];
[alertControllerMessageStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:14] range:NSMakeRange(0, length)];
[alertVc setValue:alertControllerMessageStr forKey:@"attributedMessage"];
這里只是做一個(gè)簡(jiǎn)單的處理,把文本轉(zhuǎn)化為富文本,富文本可以進(jìn)行各種各樣的設(shè)置.
富文本設(shè)置可以參考文章:iOS 富文本使用,
如何把文章排版變得更好看,點(diǎn)擊:Markdown使用指南(常用語(yǔ)法,干貨).