2010-03-22 12 views
12

Giao thức UIAlertViewDelegate xác định hai phương thức, alertView:clickedButtonAtIndex:alertView:didDismissWithButtonIndex:, dường như tôi giống hệt nhau về tính hữu dụng.UIAlertViewDelegate đã nhấpButtonAtIndex: tính hữu dụng?

Tại sao có clickedButtonAtIndexdidDismissButtonWithIndex khi cả hai đều làm điều tương tự? Tôi nhận ra rằng cũng có một số willDismissButtonWithIndex xảy ra trước khi chế độ xem cảnh báo bị loại bỏ, nhưng có bất kỳ lý do nào để sử dụng clickedButtonAtIndex thay vì didDismissButtonWithIndex không?

Trả lời

19

Tôi tìm thấy một sự khác biệt hữu ích hơn giữa hai:

Khi thấy một UIAlertView, và các thiết bị đi ngủ, alertView:didDismissWithButtonAtIndex: được gọi là, mặc dù quan điểm cảnh báo là không thực sự bị sa thải. Nó được hiển thị một lần nữa khi thiết bị tỉnh dậy. alertView:clickedButtonAtIndex: chỉ được gọi khi người dùng nhấp vào một trong các nút.

12

Số alertView:clickedButtonAtIndex: được gọi khi người dùng nhấp vào nút trên chế độ xem cảnh báo trong khi alertView:didDismissWithButtonIndex: được gọi sau khi một chế độ xem cảnh báo được loại bỏ khỏi màn hình. (Xem UIAlertViewDelegate Protocol Reference.)

Sự khác biệt là tối thiểu nhưng nó cho phép bạn làm điều gì đó trước hoặc sau hoạt ảnh.

+2

willDismissWithButtonIndex phương pháp trông hoàn toàn giống với clickButtonAtIndex: sau đó ... – Vladimir

+1

Có, nhưng có một chút khác biệt. Một người gọi khi người dùng đã nhấn nút (để cảnh báo luôn hiển thị) và người kia gọi khi cảnh báo đã biến mất. Ví dụ: Vì vậy, nếu bạn muốn thực hiện chuyển đổi giữa 2 chế độ xem, điều tốt hơn là làm điều này khi cảnh báo đã đóng trong "alertView: didDismissWithButtonIndex:". –

+1

Nhưng có lý do nào để sử dụng clickButtonAtIndex trên willDismissWithButtonIndex (not didDismiss) hay ngược lại không? –

1

Nếu chế độ xem cảnh báo biến mất vì bất kỳ lý do nào (bao gồm cả được bao phủ bởi một UIAlertView khác, đi ngủ, v.v.), didDismissWithButtonAtIndex: được gọi. Điều này có nghĩa là phương thức này có thể được gọi ngay cả khi người dùng không nhấp vào bất kỳ thứ gì. Điều này có thể dẫn đến hành vi không mong muốn nếu bạn phụ thuộc vào cuộc gọi lại đại biểu này để được gọi để phản hồi cho người dùng thực sự nhấp vào một nút. Trong trường hợp này, clickedButtonAtIndex: hữu ích hơn.

1

tôi không thể tái tạo hành vi của Ed bằng cách khóa điện thoại của tôi với quan điểm hiện cảnh báo trên iOS 7.

Tuy nhiên, sự khác biệt quan trọng nhất giữa alertView:clickedButtonAtIndex:, alertView:didDismissWithButtonIndex:alertView:willDismissWithButtonIndex: là phương pháp đầu tiên (clickedButtonAtIndex:) chỉ là được gọi khi người dùng khai thác một cách rõ ràng trên một nút trên chế độ xem cảnh báo của bạn (do đó 'đã nhấp').

Có thể chế độ xem cảnh báo bị loại bỏ mà không cần nhấp vào nút không? Có, bạn có thể ẩn theo chế độ xem cảnh báo bằng cách sử dụng phương thức UIAlertViewdismissWithClickedButtonIndex:animated:. Vì vậy, nếu bạn cần một số hành vi luôn được kích hoạt khi loại bỏ chế độ xem cảnh báo - cho dù người dùng đã nhấn vào nút hoặc được kích hoạt theo chương trình thì sử dụng didDismissWithButtonIndex:willDismissWithButtonIndex: có ý nghĩa hơn.

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