2011-08-16 24 views
5

Tôi đã thêm thanh công cụ bằng cách sử dụng Trình tạo giao diện, nhưng tôi cần phải thêm các nút khi chạy/có điều kiện. Tôi không nhận được bất kỳ lỗi nào, nhưng các nút động của tôi không xuất hiện trên thanh công cụ. Tôi đã xác minh rằng arrayOfModulesScreens được tải với dữ liệu tôi cần. Ít nhất là công trình (:)). Tôi có cần thêm các nút vào UIView không, sau đó thêm chế độ xem đó vào thanh công cụ? Chỉ cần suy nghĩ outloud. Có lẽ có một cách tiếp cận tốt hơn để bắt đầu với? Cảm ơn trước cho bất kỳ manh mối dẫn đến giải quyết.Làm thế nào để thêm UIButton vào UIToolBar theo chương trình?

CustomFormController.h

@interface CustomFormController : UIViewController { 
    UIToolbar *screensBar; 
} 

CustomFormController.m

EPData *epData = [[EPData alloc] init]; 
NSArray *screens = [epData loadPlistIntoArray:@"Screens"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"process_module_id == %@", process_modulesID]; 
NSArray *arrayOfModulesScreens = [screens filteredArrayUsingPredicate:predicate]; 

for(int i=0; i < [arrayOfModulesScreens count]; i++) { 
    NSDictionary *dictRow = [arrayOfModulesScreens objectAtIndex:i]; 
    UIButton *button = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain]; 
    [button setTitle:[dictRow objectForKey:@"screen_title"] forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside]; 
    [screensBar addSubview:button]; 
} 

Trả lời

8

Nếu bạn đang thực sự muốn thêm một UIBarButtonItem (không phải là một UIButton) vào thanh công cụ, bạn chỉ cần tạo một hoặc nhiều UIBarButtonItems, đặt chúng trong một NSArray (hoặc NSMutableArray), và gán mảng đó cho thuộc tính items của thanh công cụ. Xem the UIBarButtonItem documentation để biết chi tiết. Sử dụng mã của bạn ở trên, có thể giống như thế này:

NSMutableArray *items = [NSMutableArray array]; 
    for (int i = 0; i < [arrayOfModulesScreens count]; i++) { 
     NSDictionary *dictRow = [arrayOfModulesScreens objectAtIndex:i]; 
     UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:[dictRow objectForKey:@"screen_title"] 
                    style:UIBarButtonItemStyleBordered 
                    target:self 
                    action:@selector(buttonClick:)]; 
     [items addObject:button]; 
     [button release]; 
    } 
    screensBar.items = items; 

(bạn sẽ, tất nhiên, sau đó cần phải thay đổi buttonClick: của bạn để mong đợi một UIBarButtonItem thay vì một UIButton).

Nếu bạn đang thực sự muốn đặt một UIButton trong đó, trước tiên bạn cần phải quấn UIButton trong một UIBarButtonItem, một cái gì đó như thế này:

UIBarButtonItem *item = [[[UIBarButtonItem alloc] initWithCustomView:button] autorelease]; 

Sau đó thêm các mục vào thanh công cụ như trên.


Đối với lý do tại sao các nút của bạn không hiển thị lên trong mã mà bạn đã viết, vấn đề là UIButton của buttonWithType: tạo ra một nút với zero chiều rộng và chiều cao không. Bạn sẽ cần phải thay đổi kích thước nút (bằng tay hoặc bằng cách sử dụng sizeToFit sau khi đặt tiêu đề) để làm cho nó hiển thị. Sau khi sửa lỗi đó, bạn sẽ thấy rằng tất cả các nút trên đầu trang của nhau ở góc trên bên trái của chế độ xem gốc; bạn sẽ cần định vị chúng theo cách thủ công nếu thích hợp.

+1

Điều đó hoạt động như một sự quyến rũ. Các bạn thật tuyệt vời! – iamtoc

+0

Điều đó làm cho cảm giác hoàn hảo là tại sao không có hình ảnh hiển thị.Cảm ơn bạn đã chạm vào điều đó cũng như cung cấp một lựa chọn tốt hơn. – iamtoc

1

Tôi không nghĩ bạn có thể thay đổi số navigationController trực tiếp trong mã của bạn như thế.

Một cách an toàn hơn sẽ là:

UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:[dictRow objectForKey:@"screen_title"] 
                  style:UIBarButtonItemStyleBordered 
                  target:self 
                  action:@selector(buttonClick:)]; 
self.navigationItem.rightBarButtonItem = button; 
1

ToolBar Cách tiếp cận

Một vấn đề với việc thêm UIButton-UIToolBar là chiều rộng của nút và vị trí của các nút là khó kiểm soát

Phương pháp tiếp cận đơn giản

Xóa thanh công cụ và đặt UIView bằng hình nền giống với thanh công cụ của bạn. Bây giờ bạn có thể thêm UIButton làm chế độ xem phụ cho chế độ xem đó. Bằng cách này, bạn có nhiều quyền kiểm soát hơn đối với vị trí và chiều rộng của các nút. Ngoài ra, bạn cũng có thể thêm các chế độ xem khác.