2010-05-04 29 views
5

Có cách nào để thay đổi khung của UIAlertView trong iPhone hoặc iPad hay không. Tôi đã thử thay đổi khung theo phương thức ủy nhiệm sau đây - (void)willPresentAlertView:(UIAlertView *)alertView;chiều rộng thay đổi của UIAlertView trong iPad

nhưng ngay cả khi đó chiều rộng của Alertview vẫn không thay đổi. Và tôi nghĩ một chiếc Alertview nhỏ trong iPad sẽ không có ý nghĩa. Và tôi đoán phải có một cách để đạt được nó, ít nhất là trong iPad.

Xin cảm ơn, krishnan.

+0

Bạn đã bao giờ tìm thấy một cách để làm điều này? Chỉ cần tò mò, rất nhiều câu trả lời ở đây, ba năm trôi qua ... vv – Morkrom

Trả lời

8

Hmm, mã này hoạt động tốt (trừ khi bạn đang cố gắng giảm kích thước - nguyên nhân trong trường hợp này bạn có thể nhận được một số vẽ xấu):

- (void)willPresentAlertView:(UIAlertView *)alertView { 
    alertView.frame = CGRectMake(x, y, width, height); 
} 

Có lẽ, bạn quên để thiết lập UIAlertView 's đại biểu với một cái gì đó giống như someAlertView.delegate = self;

 

CẬP NHẬT   ↓

codepart:

- (IBAction)go:(id)sender { 
    UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Title" message:@"Message" delegate:self cancelButtonTitle:nil 
     otherButtonTitles:nil] autorelease]; 
    alert.delegate = self; 
    [alert show]; 
} 

- (void)willPresentAlertView:(UIAlertView *)alertView { 
    alertView.frame = CGRectMake(5.f, 1.f, 100.f, 200.f); 
} 

quả (trên iPod của tôi): http://dl.dropbox.com/u/6455784/alert_view_frame.png

+1

Tôi đã thiết lập các đại biểu. Chiều cao của AlertView thay đổi nhưng không thay đổi chiều rộng. Nó thực sự có hiệu quả với bạn không? – Krishnan

+0

Có. Tuy nhiên, khi chiều rộng của khung nhìn nhỏ hơn thì cần thiết cho hiển thị văn bản chính xác (kết xuất), khung nền của khung nhìn được hiển thị xấu (phần bên trái của hình chữ nhật khung được làm tròn, nhưng phải không). – kpower

+0

Bạn có thể xác nhận giải pháp của mình hoạt động không? astalapista nói nó không hoạt động. – Krishnan

3

Không textfields có mặt trên alertview của tôi, vẫn còn khi tôi đặt khung hoặc sử dụng chuyển đổi khung nền của view được render nặng trong thiết bị . Điều này sẽ làm việc tốt trong giả lập chỉ.

3

Tôi biết đây là một câu hỏi cũ nhưng tôi đã phải đối mặt với cùng một vấn đề và câu trả lời ở đây đã giúp tôi. Tôi cần mở rộng tiêu đề và các trường văn bản tin nhắn để chứa thêm văn bản trên iPad.

Điều tôi đã làm là triển khai phương thức ủy quyền UIAlertView willPresentAlertView: và thêm hai đối tượng UILabel để làm tiêu đề và thông báo. Tôi đã có thể cấu hình kích thước khung hình và nguồn gốc của hai nhãn này. Sau khi có được kích thước mong muốn cho các trường văn bản, tôi thay đổi kích thước cảnh báo để chứa văn bản mới. Sau đó, tôi lặp qua các bản xem trước của chế độ xem cảnh báo để tìm nút và điều chỉnh khung của nó.

- (void)willPresentAlertView:(UIAlertView *)alertView { 

     // add a new label and configure it to replace the title 
     UILabel *tempTitle = [[UILabel alloc] initWithFrame:CGRectMake(10,20,350, 20)]; 
     tempTitle.backgroundColor = [UIColor clearColor]; 
     tempTitle.textColor = [UIColor whiteColor]; 
     tempTitle.textAlignment = UITextAlignmentCenter; 
     tempTitle.numberOfLines = 1; 
     tempTitle.font = [UIFont boldSystemFontOfSize:18]; 
     tempTitle.text = alertView.title; 
     alertView.title = @""; 
     [alertView addSubview:tempTitle]; 
     [tempTitle release]; 

     // add another label to use as message 
     UILabel *tempLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 50, 350, 200)]; 
     tempLabel.backgroundColor = [UIColor clearColor]; 
     tempLabel.textColor = [UIColor whiteColor]; 
     tempLabel.textAlignment = UITextAlignmentCenter; 
     tempLabel.numberOfLines = 20; 
     tempLabel.text = alertView.message; 
     [alertView addSubview:tempLabel]; 

     // method used to resize the height of a label depending on the text height 
     [self setUILabel:tempLabel withMaxFrame:CGRectMake(10,50, 350, 300) withText:alertView.message]; 
     alertView.message = @""; 

     // set the frame of the alert view and center it 
     alertView.frame = CGRectMake(CGRectGetMinX(alertView.frame) - (370 - CGRectGetWidth(alertView.frame))/2 , 
            alertView.frame.origin.y, 
            370, 
            tempLabel.frame.size.height + 120); 


     // iterate through the subviews in order to find the button and resize it 
     for(UIView *view in alertView.subviews) 
     { 
      if([[view class] isSubclassOfClass:[UIControl class]]) 
      { 
       view.frame = CGRectMake (view.frame.origin.x+2, 
              tempLabel.frame.origin.y + tempLabel.frame.size.height + 10, 
              370 - view.frame.origin.x *2-4, 
              view.frame.size.height); 
      } 
     } 

     [tempLabel release]; 
} 

Và phương pháp được sử dụng để thay đổi kích thước nhãn:

- (void)setUILabel:(UILabel *)myLabel withMaxFrame:(CGRect)maxFrame withText:(NSString *)theText{ 
    CGSize stringSize = [theText sizeWithFont:myLabel.font constrainedToSize:maxFrame.size lineBreakMode:myLabel.lineBreakMode]; 
    myLabel.frame = CGRectMake(myLabel.frame.origin.x, 
           myLabel.frame.origin.y, 
           myLabel.frame.size.width, 
           stringSize.height 
           ); 
} 

Tôi không biết nếu điều này là cách tốt nhất để làm điều này nhưng nó làm việc cho tôi.

+0

Có Nó đã hoạt động trước ios7, nhưng đối với IOS 7 nó không hoạt động. – UserDev

4

đây là giải pháp bạn đang tìm kiếm nếu bạn chỉ muốn thay đổi chiều rộng của UIAlertView chuẩn với trường văn bản lớn và một nút ok. Trong trường hợp của tôi, tôi chỉ muốn một cảnh báo với một số lượng lớn văn bản. Và có văn bản đó tất cả có thể nhìn thấy mà không cần phải di chuyển văn bản. Bí quyết là bạn phải thay đổi chiều rộng của tất cả/một số khung nhìn bên trong. Không đảm bảo điều này sẽ vượt qua phê duyệt ứng dụng. Họ có thể tìm thấy UIAlertTextView và từ chối nó.

#define ALERT_VIEW_WIDTH 600 
#define ALERT_PADDING 20 
-(void) willPresentAlertView:(UIAlertView*) alertView 
{ 
    id thing; 
    int center=alertView.center.x-ALERT_VIEW_WIDTH/2; 
    for (thing in alertView.subviews) 
    { 
     NSLog(@"%@", [[thing class] description]); 
     if([[[thing class] description] isEqualToString:@"UIAlertTextView"]) 
     { 
      UIView* v=(UIView*)thing; 
      v.frame=CGRectMake(v.frame.origin.x+ALERT_PADDING, v.frame.origin.y, ALERT_VIEW_WIDTH-ALERT_PADDING*3, 250); 
     } 
     if([[[thing class] description] isEqualToString:@"UIThreePartButton"]) 
     { 
      UIView* v=(UIView*)thing; 
      v.frame=CGRectMake(v.frame.origin.x+ALERT_PADDING, v.frame.origin.y, ALERT_VIEW_WIDTH-ALERT_PADDING*3, v.frame.size.height); 
     } 
    } 
    alertView.frame=CGRectMake(center, alertView.frame.origin.y, ALERT_VIEW_WIDTH, 360); 

} 
+0

Bạn đã nhận được ứng dụng được chấp thuận mà bạn đã sử dụng không? –

0

Sử dụng phương pháp này với chiều cao tương ứng và chiều rộng cho iPhone và iPad tương ứng:

- (void)willPresentAlertView:(UIAlertView *)alertView { 
    [alertView setFrame:CGRectMake(5, 20, 300, 420)]; 
} 
Các vấn đề liên quan