iOS7以上系统自定义UIAlertController
来源:互联网 发布:新买ssd怎么装系统知乎 编辑:程序博客网 时间:2024/06/05 10:45
是不是发现原来这段代码:
#pragma mark -
#pragma mark - alert delegate
- (void) willPresentAlertView:(UIAlertView *)alertView
{
for (UIView *subViewin alertView.subviews)
{
UILabel *tmpLabel = (UILabel *)subView;
tmpLabel.textAlignment =NSTextAlignmentLeft;
}
}
在iOS7.0及以上版本不能用(说明苹果对私有api管理越来越严格,猜测),如果还想uialertview文字对其要费一些心思了。
如果你有这样的需求:
1>message 信息显示居左对齐,如下图(iOS6.0和iOS7.1显示)
2>在iOS7.0以下版本标题居中,message居左(如上图)。
我们对上述代理方法稍作更改如下:
#pragma mark -
#pragma mark - alert delegate
- (void) willPresentAlertView:(UIAlertView *)alertView
{
//由于不希望标题也居左
NSInteger labelIndex = 1;
//在ios7.0一下版本这个方法是可以的
for (UIView *subViewin alertView.subviews)
{
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1)
{
if ([subView isKindOfClass: [UILabelclass]])
{
if (labelIndex > 1)
{
UILabel *tmpLabel = (UILabel *)subView;
tmpLabel.textAlignment =NSTextAlignmentLeft;
}
//过滤掉标题
labelIndex ++;
}
}
}
}
但这只能在ios7.0以下版本可以生效;如果是8.0,处理方式还不一样,具体如下:- (void) showAlertWithMessage:(NSString *) message
{
//8.0
if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1) {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"ffff"message:message preferredStyle:UIAlertControllerStyleAlert];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
//paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
paragraphStyle.alignment = NSTextAlignmentLeft;
//行间距
paragraphStyle.lineSpacing = 5.0;
NSDictionary * attributes = @{NSFontAttributeName : [UIFont systemFontOfSize:18.0],NSParagraphStyleAttributeName : paragraphStyle};
NSMutableAttributedString *attributedTitle = [[NSMutableAttributedString alloc]initWithString:message];
[attributedTitle addAttributes:attributes range:NSMakeRange(0, message.length)];
[alertController setValue:attributedTitle forKey:@"attributedMessage"];//attributedTitle\attributedMessage
//end ---
UIAlertAction *defaultAction1 = [UIAlertAction actionWithTitle:@"cancel"
style: UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
UITextField *textField = alertController.textFields[0];
NSLog(@"text was %@", textField.text);
}];
UIAlertAction *defaultAction2 = [UIAlertAction actionWithTitle:@"ok"
style: UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
NSLog(@"ok btn");
[alertControllerdismissViewControllerAnimated:YES completion:nil];
}];
[alertController addAction:defaultAction1];
[alertController addAction:defaultAction2];
//添加textfield
UIViewController *rootViewController = [UIApplicationsharedApplication].keyWindow.rootViewController;
[rootViewController presentViewController:alertController animated: YES completion: nil];
}else{
UIAlertView *tmpAlertView = [[UIAlertView alloc] initWithTitle:@"测试换行"
message:message
delegate:self
cancelButtonTitle:nil
otherButtonTitles:@"知道了", nil];
//如果你的系统大于等于7.0
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
{
CGSize size = [self.messageString sizeWithFont:[UIFont systemFontOfSize:15]constrainedToSize:CGSizeMake(240, 1000) lineBreakMode:NSLineBreakByTruncatingTail];
UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 240, size.height)];
textLabel.font = [UIFont systemFontOfSize:15];
textLabel.textColor = [UIColor blackColor];
textLabel.backgroundColor = [UIColor clearColor];
textLabel.lineBreakMode = NSLineBreakByWordWrapping;
textLabel.numberOfLines = 0;
textLabel.textAlignment = NSTextAlignmentLeft;
textLabel.text = self.messageString;
[tmpAlertView setValue:textLabel forKey:@"accessoryView"];
//这个地方别忘了把alertview的message设为空
tmpAlertView.message = @"";
}
[tmpAlertView show];
}
}
这样的话就可以了。
调用这个方法:
- (void)viewDidLoad
{
[superviewDidLoad];
self.view.backgroundColor = [UIColorgrayColor];
self.messageString =@"1.第一行我是3个子\n2.第二行我是好几个字反正目的是为了和第一行区分开来\n3.哈哈我是陪衬的";
UIButton *alertBtn = [[UIButtonalloc] initWithFrame:CGRectMake(0,200, 320, 40)];
[alertBtn setTitle:@"点我啊,我会alert" forState:UIControlStateNormal];
alertBtn.backgroundColor = [UIColorredColor];
[alertBtnaddTarget:selfaction:@selector(alertBtnTapped)forControlEvents:UIControlEventTouchUpInside];
[self.viewaddSubview:alertBtn];
}
这里别忘声明一个属性self.messageString
- iOS7以上系统自定义UIAlertController
- iOS开发--iOS7以上自定义leftBarButtonItem后系统滑动返回失效的完美解决方案
- iOS7以上自定义一个navigationController,并沿用系统的侧滑返回效果
- ios7以上系统隐藏状态栏方法
- 让 UIAlertController 兼容 iOS7
- 自定义UIAlertController
- 自定义UIAlertController
- iOS开发--修复iOS7以上自定义LeftBarbuttonItem后向右偏移
- iOS开发--自定义UIAlertController
- ios开发点滴-ios7系统以上mac地址获取为假地址
- 二维码扫描 IOS原生API IOS7.0及以上系统支持
- 用tomcat配置https自签名证书,解决 ios7.1以上系统, 苹果inHouse发布
- iOS开发 自带二维码扫描(仅支持iOS7及以上系统)
- 用tomcat配置https自签名证书,解决 ios7.1以上系统, 苹果inHouse发布
- ios7以上的二维码扫描
- iOS7及以上判断运营商
- iOS7.0以上 完整定位
- ios7以上的二维码扫描
- anjularJS笔记-根据经纬度计算km
- 雷声大雨点小的冯小刚之《我不是潘金莲》观后感
- Bmob发送短信验证码官方demo更新(3.5.0)版本
- QML与c++交互的一些坑
- java中try/catch性能和原理
- iOS7以上系统自定义UIAlertController
- 自定义搜索框的UI
- 关于JSP中文乱码问题解决方法
- 3.1 决策树(decision tree)算法
- Java动态代理
- 关于Cocoapods的安装,使用以及过程中遇到的问题(个人总结)
- PCB设计大讲堂:PCB Layout细则(二)
- Eclipse/IntelliJ/AndroidStudio快捷键与小技巧
- mysql SQL语句