2013-08-26 32 views
10

Tôi đang cố gắng đặt nút BACK cho bộ VC được đẩy trong ngăn xếp UINavigationController. Tôi sử dụng mã sau đây, và nó không hoạt động - Tôi vẫn nhận được tên VC trước đó xuất hiện như là tiêu đề nút quay lại.iOS >> Nút quay lại mục tiêu đề lại không thay đổi

-(void)viewWillAppear:(BOOL)animated { 

    [super viewWillAppear:animated]; 

    self.title = @"VC Title"; 

    UIBarButtonItem* myBackButton = [[UIBarButtonItem alloc] 
            initWithTitle:@"Back" 
            style:UIBarButtonItemStyleBordered 
            target:nil 
            action:nil]; 

    self.navigationItem.backBarButtonItem = myBackButton; 

} 

Bất kỳ ai?

Trả lời

16

Hãy thử thiết lập các tiêu đề trong giao diện điều khiển của cha mẹ viewDidLoad

UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(popView)]; 

self.navigationItem.leftBarButtonItem = customBarItem; 
+3

Cảm ơn chris13. Điều đó đã làm điều đó. Mặc dù rằng self.navigationItem liên quan đến VC tiếp theo và không phải là một trong những hoạt động hiện tại ... Bất kỳ ý tưởng tại sao hoặc có thể bạn có một liên kết đến một lời giải thích tốt về nó? –

+1

Tôi cũng nghĩ rằng đó là lạ nhưng Apple Docs làm cho nó một chút rõ ràng hơn .. Xin vui lòng chấp nhận câu trả lời nếu nó giúp bạn;) – chris13

+4

Điều này không hoạt động trong iOS 7. – zgjie

12

Từ tài liệu của Apple:

Nút mục thanh ở phía bên trái của thanh điều hướng cho phép chuyển hướng trở lại với bộ điều khiển xem trước trên ngăn điều hướng. Bộ điều hướng điều hướng cập nhật phía bên trái của thanh điều hướng như sau:

Nếu bộ điều khiển chế độ xem cấp cao mới có mục nút tùy chỉnh trên thanh bên trái, mục đó sẽ được hiển thị. Để chỉ định một mục nút thanh tùy chỉnh bên trái, hãy đặt thuộc tính leftBarButtonItem của mục điều hướng của trình điều khiển chế độ xem.

Nếu trình điều khiển chế độ xem cấp cao nhất không có mục nút tùy chỉnh bên trái, nhưng mục điều hướng của bộ điều khiển xem trước đó có mục hợp lệ trong thuộc tính backBarButtonItem của nó, thanh điều hướng hiển thị mục đó.

Nếu mục nút tùy chỉnh không được chỉ định bởi bộ điều khiển chế độ xem, nút quay lại mặc định được sử dụng và tiêu đề được đặt thành giá trị của thuộc tính tiêu đề của trình điều khiển chế độ xem trước - tức là bộ điều khiển chế độ xem một cấp độ xuống trên ngăn xếp. (Nếu chỉ có một bộ điều khiển chế độ xem trên ngăn điều hướng, không có nút quay lại nào được hiển thị.)

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn johnyu. Nhưng nếu tôi chọn tùy chọn đầu tiên của thiết lập một barButton tùy chỉnh như navigationItem.leftBarButtonItem nó không có nút quay lại mặc định "mũi tên" hình dạng. Bất kỳ ý tưởng làm thế nào để giải quyết điều đó? –

+0

+1 Đây là liên kết: Cập nhật Thanh Điều hướng https://developer.apple.com/library/ios/documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006934- CH3-SW25 – situee

+0

Cảm ơn! Cuối cùng, tôi đã cố gắng đưa ra hành vi mà tôi muốn quay lại nút. –

17

trong điều khiển điểm cha mẹ:

- (void)viewWillDisappear:(BOOL)animated 
{ 
    self.title = @"Back"; 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    self.title = @"Title of your navigation bar"; 
} 

sẽ làm các trick

+0

Kinda vui lừa nhưng nó hoạt động! :) – NightFury

+0

Genius! Cảm ơn! –

+0

lừa tuyệt vời ... mã thông minh .. –

3
self.navigationItem.hidesBackButton = YES; 
self.navigationItem.leftBarButtonItem =[[UIBarButtonItem alloc] initWithTitle:@"Put Any Title" 
             style:UIBarButtonItemStyleBordered 
            target:nil 
            action:nil]; 
0

Một giải pháp khác, rất nhanh.

Ghi đè phương thức này trong bộ điều khiển Chế độ xem cơ sở của bạn và bạn sẽ có nút quay lại trên mọi bộ điều khiển chế độ xem được đẩy. (Chỉ cần không thêm [super setTitle:title])

- (void)setTitle:(NSString *)title 
{ 
    UILabel *lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 44)]; 
    [lbl setText:title]; 
    [lbl setTextColor:[UIColor whiteColor]]; 
    [self.navigationItem setTitleView:lbl]; 
} 
0

giải pháp bảng phân cảnh;

nhấp vào mục điều hướng của bộ điều khiển chế độ xem trước đó. sau đó nhấp vào trình kiểm tra thuộc tính trên ngăn bên phải, sau đó viết "" hoặc bất kỳ mục nào khác trên vùng nút sau. điều này sẽ cho bộ điều khiển xem điều gì sẽ hiển thị khi trong bộ điều khiển xem tiếp theo (con).hy vọng nó giúp

cho giải pháp mã;

UIBarButtonItem *customBarItem = [[UIBarButtonItem alloc] initWithTitle:@"back off" style:UIBarButtonItemStyleBordered target:self action:@selector(popView)]; 
[[self navigationItem] setBackBarButtonItem:customBarItem]; 
0

Bạn có thể sử dụng này (trong viewController cho thấy trở lại nút)

UINavigationController *nvc = self.navigationController; 
NSInteger currentViewControllerIndex = [nvc.viewControllers indexOfObject:self]; 

if (currentViewControllerIndex > 0) { 
    UIViewController *previousViewController = self.navigationController.viewControllers[currentViewControllerIndex - 1]; 
    previousViewController.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:backButtonTitle style:UIBarButtonItemStylePlain target:nil action:nil]; 
} 

Mở nhanh chóng

if let currentViewControllerIndex = self.navigationController?.viewControllers.indexOf(self) where currentViewControllerIndex > 0, 
    let previousViewController = self.navigationController?.viewControllers[currentViewControllerIndex - 1] { 
     previousViewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: backButtonTitle, style: .Plain, target: nil, action: nil) 
} 
Các vấn đề liên quan