2009-07-31 31 views
9

Khi điều hướng đến bất kỳ chế độ xem nào trong ứng dụng có trình điều khiển điều hướng được thực hiện, nó sẽ hiển thị nút quay lại. lượt xem. Có cách nào tôi có thể sử dụng hình ảnh tùy chỉnh thay vì hình ảnh mặc định không?Làm cách nào tôi có thể hiển thị hình ảnh tùy chỉnh trong nút thanh điều hướng thay vì các nút mặc định được hiển thị bằng thanh điều hướng

Trả lời

18

Có thể.

Bạn có thể kiểm soát nút quay chuẩn sẽ trông như thế nào khi một bộ điều khiển chế độ xem khác được đẩy lên trên bộ điều khiển xem nhất định bằng cách đặt mục nút quay lại của mục điều hướng (bạn có thể tùy chỉnh tiêu đề hoặc sử dụng hình ảnh):

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:nil action:nil]; 
self.navigationItem.backBarButtonItem = btn; 
[btn release]; 

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:yourImage style:UIBarButtonItemStyleBordered target:nil action:nil]; 
self.navigationItem.backBarButtonItem = btn; 
[btn release]; 

Lưu ý: bạn định cấu hình bộ điều khiển này trong bộ điều khiển chế độ xem "cha mẹ" có thể có (các) bộ điều khiển chế độ xem khác được đẩy lên trên nó. Cấu hình được thực hiện trong "cha mẹ" và sự xuất hiện của nút quay lại được thay đổi khi một số bộ điều khiển xem ở trên cùng. Nhấn vào nút quay lại sẽ đưa bạn trở lại như mong đợi.


Bạn cũng có thể tạo UIBarButtonItem của riêng bạn và thiết lập nó như là leftButtonItem trên thanh điều hướng trên bộ điều khiển xem hiện tại:

UIBarButtonItem *btn = [[UIBarButtonItem alloc] initWithImage:yourImage style:UIBarButtonItemStyleBordered target:self action:@selector(yourMethod:)]; 
self.navigationItem.leftBarButtonItem = btn; 
[btn release]; 

Note: trong trường hợp này, phía sau/thanh bên trái mục nút được thay đổi cho bộ điều khiển chế độ xem hiện tại (khi nó ở trên đầu). Bạn phải triển khai phương thức yourMethod:. Nếu bạn chỉ đơn giản là muốn nút quay lại, bạn phải tự xử lý trình điều khiển chế độ xem bằng cách gọi [self.navigationController popViewControllerAnimated:YES];.

3

Tôi thấy rằng không có giải pháp nào thực sự giải quyết được UIBarButton BACK và cũng cung cấp hành vi ẩn nếu bộ điều khiển chế độ xem là gốc.

-(void)popViewControllerWithAnimation { 
[self.navigationController popViewControllerAnimated:YES]; 
} 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    if([self.navigationController.viewControllers objectAtIndex:0] != self) 
    { 
     UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 26, 26)]; 
     [backButton setImage:[UIImage imageNamed:@"back"] forState:UIControlStateNormal]; 
     [backButton setShowsTouchWhenHighlighted:TRUE]; 
     [backButton addTarget:self action:@selector(popViewControllerWithAnimation) forControlEvents:UIControlEventTouchDown]; 
     UIBarButtonItem *barBackItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; 
     self.navigationItem.hidesBackButton = TRUE; 
     self.navigationItem.leftBarButtonItem = barBackItem; 
    } 
} 
0

Nó gần như hoạt động như nút quay lại. Ngoại trừ hoạt ảnh chuyển tiếp (sau khi nút được nhấn và chế độ xem hiện tại được bật ra khỏi điều hướng ở bên phải).

Cách đúng là tạo danh mục.

@interface UINavigationBar (MyNavigationBar) 
-(void)drawRect:(CGRect)rect; 
@end 

@implementation UINavigationBar (MyNavigationBar) 
-(void)drawRect:(CGRect)rect { 
UIImage *image = [UIImage imageNamed:@"....."]; 
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 
Các vấn đề liên quan