2009-09-12 20 views
15

Tôi đã thử cách tiếp cận/hack này: http://blog.blackwhale.at/2009/06/uibuttons-in-uinavigationbar/Làm cách nào để bạn thêm nhiều UIBarButton vào UINavigationItem.rightBarButtonItem (hoặc leftBarButtonItem)?

Vấn đề là để lại một đường may mờ nhạt. Tôi đã thử đặt hình nền của thanh công cụ lồng nhau thành hình ảnh mà tôi đã chụp. Điều đó không hiệu quả. Hình ảnh không được áp dụng. Tôi cũng đã thử sử dụng một UINavigationBar lồng nhau và điều đó dường như không hoạt động.

Tôi đã thấy điều này được thực hiện trong một số ứng dụng iPhone. Có ai biết làm thế nào?

[EDIT] Tôi muốn các nút trông giống như UIBarButtonItems bình thường và có thể sử dụng kiểu hệ thống như UIBarButtonSystemItemAdd, UIBarButtonSystemItemRefresh. Liên kết mà tôi đã cung cấp thực hiện điều này ngoại trừ bạn có thể nhìn thấy đường may mờ vì đó là thanh UIToolbar được lồng trong thanh điều hướng ..

Vui lòng không đề cập đến nguyên tắc này. (Chúng tôi biết).

Tôi đánh giá cao sự đóng góp của bạn ... đó là cách duy nhất để làm điều này!

+0

Các liên kết mà bạn đề cập là xuống :-( –

Trả lời

6

Để thoát khỏi chế độ nền ('đường may') của thanh công cụ UIToolbar, tạo một lớp con của UIToolbar và ghi đè phương thức rect (draw): (CGRect). Để trống và thanh công cụ UIToolbar của bạn sẽ không còn nền nữa.

Chỉ cần sử dụng điều này trong dự án của riêng tôi và làm việc tuyệt vời. Các mặt hàng này trong các ý kiến ​​của: http://osmorphis.blogspot.com/2009/05/multiple-buttons-on-navigation-bar.html

+2

FYI, iOS 5.0 hỗ trợ nhiều nút thanh điều hướng. Xem câu trả lời tôi đã đăng bên dưới. Tuy nhiên, nếu bạn cần triển khai các phiên bản cũ hơn của hệ điều hành thì bạn vẫn sẽ cần sử dụng kỹ thuật được mô tả trong câu trả lời này. –

2

xem ví dụ uicatalogue có sẵn tại trang web của apple miễn phí ... họ đã sử dụng kiểm soát uisegmented để hiển thị ba nút ở vị trí của nút thanh ngay trên thanh navigaion ...

+0

Xin lỗi tôi không tìm kiếm Tôi muốn các nút tiêu chuẩn như + (nút thêm), Chỉnh sửa, làm mới biểu tượng, v.v. – Cal

+0

bạn có thể thêm chế độ xem tùy chỉnh với các nút mong muốn ... tìm kiếm google để xem mã tùy chỉnh..bạn sẽ có thể nhận được nó –

+0

có nhiều hướng dẫn trên mạng để thực hiện điều này. Nếu bạn đã thử đăng mã của mình –

3
UIView *parentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, myWidth, myHeight)]; 
// make UIView customView1... (UILabel, UIButton, etc.) with desired frame and settings 
[parentView addSubview:customView1]; 
[customView1 release]; 
// make UIView customView2... (UILabel, UIButton, etc.) with desired frame and settings 
[parentView addSubview:customView2]; 
[customView2 release]; 
UIBarButtonItem *customBarButtomItem = [[UIBarButtonItem alloc] initWithCustomView:parentView]; 
[parentView release]; 
self.navigationItem.rightBarButtonItem = customBarButtomItem; 
[customBarButtomItem release]; 
+0

Tôi muốn các nút trông giống như UIBarButtonItems bình thường và có thể sử dụng các kiểu hệ thống như UIBarButtonSystemItemAdd, UIBarButtonSystemItemRefresh. Liên kết mà tôi cung cấp thực hiện điều này ngoại trừ bạn có thể thấy một đường may mờ bởi vì nó là một thanh UIToolbar được lồng trong thanh điều hướng. – Cal

+0

alex câu trả lời hoạt động cho bạn hoàn hảo –

+0

Tôi đã thử điều này trước và nút trông khác nhau. Nhưng bạn có thể chụp ảnh màn hình của giao diện bạn muốn và sử dụng trong nút. – Cal

0

Trong iOS 4.x clearColor dường như không có tác dụng trên UIToolbar, trong khi ghi đè drawRect của nó: đã làm.

36

iOS 5.0 hiện hỗ trợ nhiều nút. Xem tài liệu iOS cho UINavigationItem. Cụ thể, như sau:

Thuộc tính:

@property(nonatomic, copy) NSArray *leftBarButtonItems; 
@property(nonatomic, copy) NSArray *rightBarButtonItems; 
@property BOOL leftItemsSupplementBackButton; 

Phương pháp:

- (void)setLeftBarButtonItems:(NSArray *)items animated:(BOOL)animated; 
- (void)setRightBarButtonItems:(NSArray *)items animated:(BOOL)animated; 
0

tôi đã đưa ra một hàm helper Tôi đang sử dụng trên tất cả các dự án của tôi. Về cơ bản nó kiểm tra nếu đã có một nút trên thanh và thêm một cái mới hoặc hợp nhất nó với các nút hiện có.Vì vậy, bạn có thể gọi hàm chỉ một lần hoặc nhiều lần:

+ (void)AddButtonToBar:(UIViewController *)controller withImage:(NSString *)imageName withAction:(SEL)action withFrame:(CGRect) frame{ 
    UIButton *newButton =[[UIButton alloc] init]; 
    [newButton setBackgroundImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal]; 
    newButton.frame = frame; 
    [newButton addTarget:controller action:action forControlEvents:UIControlEventTouchUpInside]; 

    if ([[controller.navigationItem rightBarButtonItems] count] == 0) 
     [controller.navigationItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithCustomView:newButton]]; 
    else { 
     NSMutableArray *existingButtons = [[NSMutableArray alloc] initWithArray:[controller.navigationItem rightBarButtonItems]]; 
     [existingButtons addObject:[[UIBarButtonItem alloc] initWithCustomView:newButton]]; 
     [controller.navigationItem setRightBarButtonItems:(NSArray *)existingButtons]; 
    } 
} 

Gọi nó từ bộ điều khiển xem:.

[Helper AddButtonToBar:self withImage:@"imageName.png" withAction:@selector(myAction) withFrame:CGRectMake(0, 0, 24, 24)]; 
Các vấn đề liên quan