2013-10-01 16 views
7

Tôi có một nút UIAlertView với 3 nút được hiển thị theo chiều dọc theo mặc định trong UIAlertView. Tôi muốn nút trên được in đậm/tô sáng. Từ sự hiểu biết và kiểm tra của tôi, nút 'hủy' là nút được tô sáng. Vấn đề là không có vấn đề làm thế nào tôi đặt nút hủy bỏ, nó được đặt cuối cùng trong hàng này. Tôi không thể làm cho nó trở thành nút đầu tiên.Làm nổi bật nút trên cùng trong UIAlertView

tôi đã cố gắng thiết lập các nút hủy bỏ một cách rõ ràng

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title 
               message:message 
               delegate:self 
             cancelButtonTitle:@"Top Button" 
             otherButtonTitles:@"Middle Button", @"Bottom Button", nil]; 

cũng như thiết lập các chỉ số của các nút hủy

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title 
                 message:message 
                 delegate:self 
              cancelButtonTitle:nil 
              otherButtonTitles:@"Top Button", @"Middle Button", @"Bottom Button", nil]; 
alert.cancelButtonIndex = 0; 

Trả lời

8

Vấn đề này thực sự gây ra bởi những thay đổi của Apple thực hiện trong iOS 7. Trước iOS 7, chúng tôi có thể truy cập vào các bản xem trước của một số UIAlertView bằng cách gọi [alertView subviews]. Nhưng vì iOS 7 không cung cấp cho chúng tôi quyền truy cập vào bất kỳ bản xem trước nào ([alertView subviews].count sẽ luôn trả về 0), chúng tôi không thể tùy chỉnh UIAlertView theo cách chúng tôi đã sử dụng.

Vì vậy, cách duy nhất để đạt được mục tiêu của bạn trong iOS 7 là tạo chế độ xem tùy chỉnh trông giống như UIAlertView và sau đó tùy chỉnh nó theo ý muốn.

Nhưng nếu bạn đang mã hóa cho một phiên bản iOS trước khi iOS 7 hơn bạn có thể sử dụng dễ dàng Hack này để truy cập vào một nút:

UIAlertView *alertView = [[UIAlertView alloc] init]; 
[alertView addButtonWithTitle:@"Yes"]; 
UIButton *yesButton = [alertView.subviews lastObject]; //is nil under iOS 7 

Bằng cách này bạn sẽ nhận được quyền truy cập vào nút đầu tiên. Sau đó, bạn có thể tùy chỉnh UIAlertView như bình thường.

Nhân tiện: Apple không chỉ muốn cung cấp tất cả UIAlertView cùng một thiết kế bằng cách thay đổi cách chúng tôi có thể tùy chỉnh chúng. Lý do nằm trong các nghiên cứu HCI (Human-Computer-Interaction). Mọi người có xu hướng nghĩ rằng nút dưới cùng luôn là câu trả lời 'mặc định' nếu đó là cách nó được triển khai trong tất cả các ứng dụng.
Cũng nút dưới cùng là chỉ nút được đánh dấu trong một UIAlertView. Vì vậy, trọng lượng hình ảnh của nó mạnh hơn trọng lượng hình ảnh của nút với cùng một lượng văn bản. Đó là một yếu tố khác tại sao mọi người có xu hướng chọn cái này. Và đó cũng là lý do tại sao nút được đánh dấu không bao giờ gây ra hành động tai hại và không thể đảo ngược ('Bạn muốn xóa tất cả trò chơi đã lưu' phải luôn nhấn nút 'Lưu trò chơi đã lưu' chứ không phải nút 'Xóa mọi thứ').
Do đó Apple luôn làm cho Cancel Button phần dưới cùng bất kể thứ tự bạn đã thêm các nút. Vì vậy, nếu ứng dụng của bạn không sử dụng giao diện hoàn toàn tùy chỉnh và sử dụng nhiều Phần tử giao diện người dùng do Apple cung cấp, tôi khuyên bạn không nên cố thay đổi hành vi đó và thực hiện nút dưới cùng của nút 'mặc định'.

+0

Lưu ý rằng việc thay đổi hệ thống phân cấp lượt xem thông báo luôn được khai báo riêng tư và bị cấm. Vì vậy, nó có thể dẫn đến từ chối trong quá trình xem xét AppStore. – vikingosegundo

+0

Điểm của bạn về HCI có ý nghĩa rất nhiều và tôi đã hiểu đó là lý do tại sao Apple không cho phép bạn thay đổi bất cứ điều gì. Tuy nhiên, theo ý kiến ​​của tôi, tôi bị cuốn vào nút trên cùng, đó là lý do tại sao tôi đang cố thay đổi nó. Cảm ơn lời giải thích. –

0

Có chế độ xem thông báo khách hàng DTAlertView.

Tôi hy vọng nó có thể giúp bạn.

Các vấn đề liên quan