2013-01-10 39 views
12

Tôi có một 1st hai controllersself và thứ 2 là maincontroller, nơi tôi đang đẩy maincontroller trong chồng, vì vậy nút quay lại được tự động sắp tới.UINavigationController và nút quay lại hành động

Ở đây tôi cần cảnh báo khi người dùng nhấn nút quay lại.

Tôi làm cách nào để thực hiện việc này?

Trả lời

20

Hoặc bạn có thể sử dụng phương thức ủy quyền của UINavigationController. Phương thức willShowViewController được gọi khi nhấn nút quay lại của VC của bạn.

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated; 
+0

@satheeshwaran tuyệt vời, chính xác những gì tôi muốn .... –

+1

Ngoài ra những gì tôi muốn. :-) Đối với hồ sơ, bạn cần phải thực hiện các giao thức trên bộ điều khiển xem bạn điều hướng trở lại. – doekman

+0

Giải pháp này hoạt động tốt và hiệu quả nhất. Hãy chắc chắn rằng kết nối với ủy nhiệm navigationController của bạn là trong - (void) viewDidAppear: (BOOL) hoạt hình, nếu không cảnh báo cũng xuất hiện khi viewcontroller đầu tiên khởi chạy lần đầu tiên. –

0

thêm một tùy chỉnh lại nút với một hành động và thiết lập cảnh báo của bạn trong hành động mà method.You có thể thêm tùy chỉnh nút của bạn trở lại từ đây: http://www.applausible.com/blog/?p=401

-1

tạo ra một nút và cung cấp cho các button action như sau.

[self alert]; 

và khi cảnh báo được hiển thị, sau khi khai thác trên có

[self.navigationController popViewController]; 

sau này,

self.navigationController.LeftBarButton = myButton; 

này có thể giúp

+0

Cảnh báo cho là gì? – richy

+1

@richy cảm ơn vì đã bình luận về câu trả lời cũ này. Cảnh báo là để hiển thị cảnh báo khi được hỏi trong câu hỏi. –

2

Tạo riêng UIBarButtonItem của bạn và thiết lập nó như là leftBarButtonItem trong phương thức viewDidLoad của mainController.

Ví dụ (ở đây tôi đã sử dụng mục hệ thống nhưng bạn cũng có thể tạo một mục hệ thống khác, xem tham chiếu lớp để biết chi tiết).

UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showAlertView:)]; 
self.navigationItem.leftBarButtonItem = leftBarButtonItem; 

// only if you don't use ARC 
// [leftBarButtonItem release]; 

nơi

- (void)showAlertView:(id)sender 
{ 
    // alert view here... 
} 
8

Đầu tiên giấu nút quay lại bằng cách sử dụng

self.navigationItem.hidesBackButton = YES; 

và sau đó tạo ra của bạn Tuỳ chỉnh nút riêng:

UIBarButtonItem *backBtn =[[UIBarButtonItem alloc]initWithTitle:@"back" style:UIBarButtonItemStyleDone target:self action:@selector(popAlertAction:)]; 
self.navigationItem.leftBarButtonItem=backBtn; 
[backBtn release]; 

và chọn của bạn là ở đây:

- (void)popAlertAction:(UIBarButtonItem*)sender 
{ 
    //Do ur stuff for pop up 
} 
+0

K guys cảm ơn, đó là lựa chọn thứ hai, có cách nào để phát hiện các hành động nút quay lại của UINavigationController ..? –

+0

Điều gì về 'b'? Hãy sửa nó. –

+0

@HarishSaran Ý của bạn là gì? Bạn có cần quay lại khi bạn nhấp vào chế độ xem cảnh báo không? –

7

tốt nhất và cách dễ nhất

Hãy thử đặt này vào bộ điều khiển xem nơi bạn muốn để phát hiện các báo chí:

-(void) viewWillDisappear:(BOOL)animated { 
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) { 
     // back button was pressed. We know this is true because self is no longer 
     // in the navigation stack. 
    } 
    [super viewWillDisappear:animated]; 
} 
0

viewControllerCount - là var chứa số của viewControllers trước đây nằm trong UINavigationController. Sau đó, chúng tôi kiểm tra xem viewControllerCount> [viewControllers count] nếu có, chúng tôi biết rằng chúng tôi sẽ quay lại (tức là nút quay lại giả).

- (void)navigationController:(UINavigationController *)navigationController 
     willShowViewController:(UIViewController *)viewController 
        animated:(BOOL)animated 
{ 
    NSArray *viewControllers = [navigationController viewControllers]; 

    if (viewControllerCount > [viewControllers count]) 
    { 
     // your code 
    } 

    viewControllerCount = [viewControllers count]; 
} 
Các vấn đề liên quan