2010-06-04 28 views
12

Tôi có thanh công cụ UIToolbar mà tôi đã thiết lập bằng IB với ba nút, trái, giữa và phải. Trong một số trường hợp, tôi không muốn hiển thị nút giữa. Có ai biết một cách để ẩn một nút cụ thể bên trong một UIToolBar? Không có tài sản ẩn, tất cả những gì tôi có thể tìm thấy là setEnable nhưng điều này vẫn để lại nút khiến người dùng tự hỏi mục đích của nó là gì. Tôi muốn chỉ hiển thị nó trong các tình huống mà nó thực sự có sử dụng.Ẩn UIToolbar UIBarButtonItems

Cảm ơn trước!

Trả lời

28

Reset the items:

-(void)setItems:(NSArray *)items animated:(BOOL)animated 

Bạn có thể nhận được các mục hiện tại bằng cách sử dụng items tài sản, sau đó chỉ cần loại bỏ một trong những bạn không muốn hiển thị và vượt qua trong mới NSArray.

Như bạn có thể thấy, bạn cũng có thể tạo ảnh động để làm rõ cho người dùng.

+0

Ahh có, công trình này. Vì một lý do nào đó, tôi nghĩ ban đầu nó sẽ không như vậy. Cảm ơn! – jmurphy

+0

@jmurphy: Bạn được chào đón! Vui vì bạn có nó hoạt động. –

+6

Có vẻ quá nhiều việc chỉ để ẩn một nút nhưng nó hoạt động. –

6

Đây là cách tôi đã làm nó .. quá nhiều đau đầu nhưng tôi của mình tốt nhất có thể đưa ra:

NSArray *toolBarArray = toolBar.items; 
NSMutableArray *newToolBarArray = [NSMutableArray arrayWithArray:toolBarArray]; 
[newToolBarArray removeObjectAtIndex:2]; 
[newToolBarArray removeObjectAtIndex:1]; 
//remove whatever buttons you want to. 

NSArray *finalTabBarArray =[[NSArray alloc] initWithObjects:newToolBarArray, nil]; 
[toolBar setItems:[finalTabBarArray objectAtIndex:0] animated:NO]; 
1

này không làm việc ở đây vì các mảng bạn đang gửi với SetItem không phải là những gì các chức năng mong đợi.

tôi đã phải thay thế dòng:

NSArray *finalTabBarArray = [[NSArray alloc] initWithObjects:newToolBarArray, nil]; 

với một này:

NSArray *finalTabBarArray = [newToolBarArray copy]; 

Sau đó, nó hoạt động hoàn hảo.

0

Câu trả lời của Mohit là câu trả lời mà tôi đã sử dụng, nhưng bạn không cần phải đặc biệt làm cho nó thành NSArray mà thanh công cụ đặt ra. Bạn chỉ có thể thiết lập mảng các mục như là một NSMutableArray. Không có lợi thế thực sự mà tôi nhận thức được nhưng một vài dòng ít mã của nó. Và theo cách đó bạn có thể lấy mảng và di chuyển về các đối tượng UIButton như bất kỳ mảng nào khác với các đối tượng và sau đó chỉ cần đặt lại thanh công cụ với mảng có thể thay đổi đó.

[newToolBarArray removeObjectAtIndex:2]; 
[newToolBarArray removeObjectAtIndex:1]; 
[toolBar setItems:newToolBarArray]; 
12

Thay vì phỏng đoán tại chỉ mục, tôi đã thêm một IBOutlet cho UIBarButtonItem và sau đó loại bỏ nó bằng tên:

NSMutableArray *toolBarButtons = [self._toolbar.items mutableCopy]; 
[toolBarButtons removeObject:self._selectButton]; // right button 
[self._toolbar setItems:toolBarButtons]; 

Và tất nhiên nó giúp để kết nối các cửa hàng tại các nhà thiết kế :)

+0

Nico độc đáo ngắn gọn, ngay cả với việc đặt tên biến không chính thống cho các thuộc tính của bạn.Thông thường, "_" được kết hợp với các biến tự động tổng hợp chứ không phải bản thân thuộc tính. ;) –

1

tôi biết nó là chủ đề khá cũ cho nhưng những người tìm kiếm trang này để giải pháp, here you go:

với iOS7, bạn có thể sử dụng phương pháp này để hiển thị/ẩn thanh công cụ mông của bạn trên:

if(// your code Condition) 
{ self.toolbarBtn1.enabled = YES; 
self.toolbarBtn1.tintColor = nil; } 
else 
{ self.toolbarBtn1.enabled = NO; 
self.toolbarBtn1.tintColor = [UIColor clearColor]; } 

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