今天需要改一個將提示框中message左對齊的需求,而蘋果SDK中并沒有公開一些屬性來設置其中message的樣式。所以其實只有拿到用來展示message的那個控件就好了,然后設置它的一些屬性,其實就是label。查了一些資料,特此整理一下
從iOS8過后蘋果建議使用UIAlertController替代UIAlertView,所以就有兩種情況
適用于iOS7以及iOS7以下的版本,想必過不了多久也就沒人用iOS7了吧??梢灾苯釉谄浯矸椒?code>-(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)…(如果還有的話以此類推)
由于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也非常方便。
新聞熱點
疑難解答