2010-07-08 27 views
5

Tôi muốn vô hiệu hóa các mặc định dùng nút Back của điều khiển chuyển hướngChúng ta có thể vô hiệu hóa bộ điều khiển chuyển hướng của leftBarButtonItem mà là nút quay lại của bộ điều khiển xem trong iPhone?

self.navigationItem.rightBarButtonItem.enabled = NO; 
// Below code does not work since leftBarButtonItem is always nil. 
self.navigationItem.leftBarButtonItem.enabled = NO; 

Tôi đã thực hiện nó với tay hiển thị dưới đây, Nhưng Có tài sản nào để vô hiệu hóa các nút mặc định trở lại với dòng chỉ đơn?

backButton = [[UIButton alloc] initWithFrame:CGRectMake(5, 5, 100, 30)]; 
[backButton setBackgroundImage:[UIImage imageNamed:@"backbutton_100.png"] forState:UIControlStateNormal]; 
[backButton addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchUpInside]; 
[backButton setTitle:@" All Customers" forState:UIControlStateNormal]; 
backButton.titleLabel.font = [UIFont boldSystemFontOfSize:12]; 
[buttonView addSubview:backButton]; 

UIBarButtonItem* leftButton = [[UIBarButtonItem alloc] initWithCustomView:buttonView]; 
self.navigationItem.leftBarButtonItem = leftButton; 
[leftButton release]; 

// Now it is working. 
self.navigationItem.leftBarButtonItem.enabled = NO; 
+0

Nút quay lại là nút bên trái, vậy tại sao bạn cố gắng đặt rightBarButtonItem.enabled thành NO? Không nên để nó? Ngoài ra, vui lòng cập nhật câu hỏi của bạn và cố gắng hiển thị mã của bạn đúng cách. Sử dụng 4 dấu cách ("") tại mỗi dòng để làm cho nó thẳng hàng. Chúng tôi đang ở đây để giúp đỡ, không phải để giải mã ;-) – Kalle

Trả lời

5

Sử dụng "ẩnBackButton = YES" thực sự không phải là một giải pháp thanh lịch, gây ra nó HIDES nút mà không phải là những gì chúng tôi muốn. Một công việc xung quanh có thể chấp nhận được sẽ thêm một UILabel vào cửa sổ ngay trên nút quay lại ít nhất là vô hiệu hóa các thao tác trên nút.

Thêm phương pháp này để lớp appdelegate của bạn:

- (void) disableLeftBarButtonItemOnNavbar:(BOOL)disable 
{ 
    static UILabel *l = nil; 

    if (disable) { 
     if (l != nil) 
      return; 
     l = [[UILabel alloc] initWithFrame:CGRectMake(0, 20, 160, 44)]; 
     l.backgroundColor = [UIColor clearColor]; 
     l.userInteractionEnabled = YES; 
     [self.window addSubview:l]; 
    } 
    else { 
     if (l == nil) 
      return; 
     [l removeFromSuperview]; 
     [l release]; 
     l = nil; 
    } 
} 

Bạn có thể gọi nó như thế này từ bất kỳ bộ điều khiển nhằm vô hiệu hóa:

MyAppDelegate *appDeleg = (MyAppDelegate *) [[UIApplication sharedApplication] delegate]; 
[appDeleg disableLeftBarButtonItemOnNavbar:YES]; 

Để kích hoạt:

MyAppDelegate *appDeleg = (MyAppDelegate *) [[UIApplication sharedApplication] delegate]; 
[appDeleg disableLeftBarButtonItemOnNavbar:NO]; 
+1

Cảm ơn bạn đã trả lời ur –

+0

Bạn được chào đón. –

+0

Có lỗi với mã và thiết bị xoay, bạn phải thực hiện biến đổi affine để làm cho nó hoạt động đúng theo các hướng khác. – Heckman

2

Gọi [self.navigationItem setHidesBackButton:YES]; cho bộ điều khiển chế độ xem bạn không muốn có nút quay lại. Sau đó, đặt leftBarButtonItem như bình thường.

+0

Vui vì tôi có thể giúp đỡ. – jrtc27

+1

Tôi muốn vô hiệu hóa nút không ẩn nút, nhờ phản hồi của bạn –

+0

Tại sao không tạo một thể hiện của UIBarButtonItem, hãy đặt nó thành leftBarButtonItem, ẩn nút backButton và đặt leftBarButtonItem cho nút của bạn. Sau đó vô hiệu hóa leftBarButtonItem. – jrtc27

11

của nó rất dễ dàng ..... chỉ cần thử điều này ra

self.navigationController.navigationBar.userInteractionEnabled = NO; //for disabling 

self.navigationController.navigationBar.userInteractionEnabled = YES; //for again enabling 
+2

Nó không xuất hiện vô hiệu hóa (với văn bản màu xám đậm), nhưng nó hoạt động và tốt hơn là ẩn nút. +1 –

+0

Nó phù hợp với tôi, thanx – derpoliuk

1

Bạn cũng có thể sử dụng

[[_navigationController.topViewController.navigationItem leftBarButtonItem] setEnabled:NO]; // The top view controller on the stack. 
[[_navigationController.visibleViewController.navigationItem leftBarButtonItem] setEnabled:NO];// Return modal view controller if it exists. Otherwise the top view controller. 

bạn có thể sử dụng khi bạn muốn vô hiệu hóa hoặc kích hoạt UIViewControler từ appdelegate, hoặc bất kỳ viewcontroler khác.

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