2010-03-15 13 views
8

Tôi đã gặp sự cố rằng phương thức UIAlertViewDelegate - (void) alertViewCancel: (UIAlertView *) alertView không được gọi khi tôi hủy một AlertView với nó nút hủy.- (void) alertViewCancel: (UIAlertView *) alertView không được gọi là

Lạ là phương thức ủy nhiệm - (void) alertXem: (UIAlertView *) alertXem nútButtonAtIndex: (NSInteger) buttonIndex hoạt động hoàn hảo.

Có ai có ý tưởng không?

Cảm ơn trước
Sean

- (void)alertViewCancel:(UIAlertView *)alertView 
{ 
    if(![self aBooleanMethod]) 
    { 
     exit(0); 
    } 
} 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    //some code 
} 

Tôi gọi đây là khi một nút được nhấp:

- (void)ImagePickDone 
{ 
    UIAlertView *alertDone = [[UIAlertView alloc] 
          initWithTitle:@"Done" 
          message:@"Are u sure?" 
          delegate:self 
          cancelButtonTitle:@"Cancel" 
          otherButtonTitles: @"Yes", nil]; 
    [alertDone show]; 
    [alertDone release]; 
} 
+1

Chúng tôi có thể xem một số mã không? Có thể việc bạn triển khai '-alertViewCancel', cũng như các đoạn mã khác xử lý chế độ xem cảnh báo của bạn (như nơi bạn trình bày lần đầu tiên). – Tim

+0

Ok. Xin lỗi, tôi quên điều đó. Tôi đã chỉnh sửa câu hỏi của tôi ngay bây giờ. – Sean

Trả lời

11

Các alertViewCancel được sử dụng cho khi hệ thống đã bác bỏ quan điểm cảnh báo của bạn, chứ không phải khi người dùng nhấn nút "Hủy". Trích dẫn từ apple docs:

Tùy chọn, bạn có thể thực hiện alertViewCancel: Phương pháp để có những hành động thích hợp khi hệ thống hủy xem cảnh báo của bạn. Nếu đại diện không triển khai phương thức này, hành vi mặc định là mô phỏng người dùng nhấp vào nút hủy và đóng chế độ xem.

Nếu bạn muốn chụp khi người dùng nhấn nút "Hủy", bạn nên sử dụng phương pháp ClickButtonAtIndex và kiểm tra xem chỉ mục có tương ứng với chỉ mục cho nút hủy hay không. Để có được điều này sử dụng chỉ số:

index = alertDone.cancelButtonIndex; 
+0

Cảm ơn rất nhiều pheelicks. Tôi đọc nó trước nhưng tôi đã không nhận được đó là không cho mục đích mà tôi muốn, bởi vì tiếng anh của tôi không phải là tốt. – Sean

+0

Đừng cảm thấy xấu, tôi đã có sự hiểu lầm tương tự chính xác này ngày hôm qua và tôi là một người bản ngữ. Tôi đã gửi phản hồi đề cập đến từ ngữ khó hiểu. Nếu nhiều người trong chúng ta làm điều đó, có thể những người khác sẽ không bị vấp ngã như chúng tôi. – willc2

2

Bạn có thể xử lý các Cancel ở chỉ số 0 của đại biểu này:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if (buttonIndex == 0){ 
     //cancel button clicked. Do something here. 
    } 
    else{ 
     //other button indexes clicked 
    } 
} 
0

Điều này có thể được cải thiện trong hai cách. Đầu tiên, nó chỉ xử lý trường hợp người dùng thực sự nhấp vào một nút. Nó không xử lý tình huống mà [myAlert dismissWithClickedButtonIndex:] được gọi, hoặc cảnh báo được loại bỏ theo một cách khác. Thứ hai, nút 0 không nhất thiết phải là nút hủy. Trong một cảnh báo với hai nút, bên trái là tại chỉ số 0, và bên phải là chỉ số 1. Nếu bạn thay đổi các tiêu đề để nút bên phải nói "Hủy", sau đó nút 1 là một cách hợp lý nút Hủy. Thay vì "willDismiss", bạn có thể thực hiện "didDismiss" sẽ được gọi sau khi hộp thoại biến mất và không phải trước đó.

- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
    if (buttonIndex == alertView.cancelButtonIndex) 
    { 
     //cancel button clicked. Do something here. 
    } 
    else 
    { 
     //other button indexes clicked 
    } 
}