1. 程式人生 > >提示框message左對齊問題

提示框message左對齊問題

前言

今天需要改一個將提示框中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也非常方便。