提示框message左對齊問題
阿新 • • 發佈:2019-01-09
前言
今天需要改一個將提示框中message左對齊的需求,而蘋果SDK中並沒有公開一些屬性來設定其中message的樣式。所以其實只有拿到用來展示message的那個控制元件就好了,然後設定它的一些屬性,其實就是label。查了一些資料,特此整理一下
正文
從iOS8過後蘋果建議使用UIAlertController替代UIAlertView,所以就有兩種情況
UIAlertView
適用於iOS7以及iOS7以下的版本,想必過不了多久也就沒人用iOS7了吧。可以直接在其代理方法-(void)willPresentAlertView:(UIAlertView *)alertView
中實現以下方法就可:
- (void)willPresentAlertView:(UIAlertView *)alertView
{
for( UIView * view in alertView.subviews )
{
if( [view isKindOfClass:[UILabel class]] )
{
UILabel* label = (UILabel*) view;
label.textAlignment = UITextAlignmentLeft;
}
}
}
拿到alertView,遍歷它的子檢視,找到UILabel那個控制元件,然後將其文字樣式設定為左對齊。
其實UILable在alertView.subviews裡面是第3個元素,第一個元素是一個UIImageView(背景),UILable(標題),UILable(Message),UIButton(Cancel)…(如果還有的話以此類推)
UIAlertController
由於UILabel在UIAlertController的View中的層級比較深,所以可以通過遍歷來找到UILabel(其實需要遍歷6次才能找到),程式碼如下:
{
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:alertControllerStyle];
UIView *messageParentView = [self getParentViewOfTitleAndMessageFromView:alertController.view];
if (messageParentView && messageParentView.subviews.count > 1) {
UILabel *messageLb = messageParentView.subviews[1];
messageLb.textAlignment = NSTextAlignmentLeft;
}
}
- (UIView *)getParentViewOfTitleAndMessageFromView:(UIView *)view {
for (UIView *subView in view.subviews) {
if ([subView isKindOfClass:[UILabel class]]) {
return view;
}else{
UIView *resultV = [self getParentViewOfTitleAndMessageFromView:subView];
if (resultV) return resultV;
}
}
return nil;
}
結語
遇到問題還是要多思考,就算蘋果沒有直接的方法去實現也不要慌張,總能找到解決之道。
如果只是修改左對齊,採用系統的,用上面的方法即可。如果還有一些複雜的用法,在UIAlertView上新增自己寫的UILabel,設定其左對齊,或者其他控制元件,可用在GitHub上面有1430個star之多的第三方CustomIOSAlertView也非常方便。