2011-10-27 37 views
5

Trong ứng dụng iOS, làm thế nào tôi có thể xác định liệu nút quay lại có được hiển thị không? Lý tưởng nhất, tôi muốn biết điều này trong phương pháp loadView điều khiển của tôi.Làm cách nào để xác định liệu nút quay lại có được hiển thị không?

Dưới đây là những gì tôi đã cố gắng trong loadView, viewDidLoad, và viewWillAppear:

if (self.navigationItem.backBarButtonItem)

và điều này:

if (self.navigationItem.leftBarButtonItem)

Cả những công việc - họ luôn bằng không (biểu thức đánh giá thành sai), ngay cả khi có nút quay lại trên màn hình. Điều cuối cùng tôi muốn làm là đặt nút Hủy là self.navigationItem.leftBarButtonItem nhưng chỉ khi không có nút quay lại. Nếu có nút quay lại, chúng tôi không cần nút Hủy. Vì vậy, việc đặt leftBarButtonItem sẽ ghi đè nút quay lại, vì vậy, chúng tôi luôn thấy nút Hủy - ngay cả khi có nút quay lại.

Trả lời

16

Bạn đang yêu cầu đối tượng sai cho backBarButtonItem. Thuộc tính này kiểm soát cách đối tượng được biểu diễn khi nó là mục "back" trong ngăn điều hướng.

Vì vậy, bạn cần phải yêu cầu người điều khiển xem ở cấp dưới đây bạn đang ở đâu trong điều hướng đống gì backBarButtonItem của nó là:

int n = [self.navigationController.viewControllers count] - 2; 
if (n >= 0) 
    if ([(UIViewController*)[self.navigationController.viewControllers objectAtIndex:n]navigationItem].backBarButtonItem == nil) 
     // Do your thing.... 

Bạn có thể cần phải kiểm tra xem điều khiển chuyển hướng đã được thêm vào viewController của bạn vào ngăn xếp tại thời điểm bạn đang thực hiện mã này, bộ điều khiển xem trên cùng vẫn có thể là bộ điều khiển trước đó. Tôi đã kiểm tra trong viewWillAppear và ngăn xếp có chứa bộ điều khiển mới ở thời điểm này.

0

loadView quá sớm. Các sớm nhất bạn có thể kiểm tra này là trong viewDidLoad. Bạn có thể cần đợi viewWillAppear.

+0

Cảm ơn bạn đã trả lời. Tôi vừa thử cả hai câu lệnh 'if' của tôi từ câu hỏi trong viewWillAppear, và tôi nhận được kết quả tương tự - chúng vẫn luôn là 0 và do đó không nói cho tôi biết tôi muốn biết điều gì. –

+0

Đảm bảo rằng 'self.navigationItem' không phải là' nil'. Mới nhất mà điều này có thể áp dụng là 'viewDidAppear'. Nếu bạn không nhìn thấy nó ở đó, bạn không nhận được đúng đối tượng. –

+0

Cảm ơn bạn lần nữa. Tôi đã xác minh rằng 'self.navigationItem' không phải là nil. Tôi đã thử nghiệm điều này trong 'viewDidAppear' và vẫn nhận được kết quả tương tự. –

3
NSLog(@"%@",self.navigationController.navigationBar.backItem); 
if (self.navigationController.navigationBar.backItem == NULL) { 
    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(addLaunch)]; 
    self.navigationItem.leftBarButtonItem = cancelButton; 
    [cancelButton release]; 
} 

mã này hoạt động, nó trong viewDidAppear, nếu điều khiển của bạn là null, theres không có nút, vì vậy tôi thêm nút hủy bỏ, không phải là một mục lưng, mặc dù chỉ là một thường xuyên:] hy vọng điều này sẽ giúp

0

Tìm kiếm những điều sau

self.navigationController.navigationBar.backItem 

thay vì backBarButtonItem.

Nếu backItem tồn tại thì bạn đang ở trên ngăn điều hướng xa hơn rootViewController.

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