2011-08-16 108 views
5

我已經使用Interface Builder添加了工具欄,但是我需要在運行時/有條件地添加按鈕。我沒有收到任何錯誤,但我的動態按鈕沒有出現在工具欄上。我已經驗證了arrayOfModulesScreens加載了我需要的數據。至少這是有效的(:))。我是否需要將按鈕添加到UIView中,然後將該視圖添加到工具欄?只是想想。也許有更好的方法來開始?提前感謝任何提供解決方案的線索。如何以編程方式將UIButton添加到UIToolBar?

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]; 
} 

回答

8

如果你確實想要一個的UIBarButtonItem(不是一個UIButton)添加到工具欄,你只需創建一個或多個UIBarButtonItems,把它們放在NSArray(或NSMutableArray)中,並將該數組分配給工具欄的items屬性。詳情請參閱the UIBarButtonItem documentation。使用你的代碼上面,這可能是這個樣子:

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; 

(你當然會,那麼就需要改變你的buttonClick:期待一個的UIBarButtonItem而不是一個UIButton)。

如果你真的想要把一個UIButton在那裏,你首先需要包裹的UIButton中的UIBarButtonItem,是這樣的:

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

然後將項目添加到工具欄如上。


至於爲什麼你的按鈕沒有顯示在您發佈的代碼,那麼問題是,的UIButton的buttonWithType:零寬度和高度爲零創建一個按鈕。您需要調整按鈕的大小(手動設置標題後使用sizeToFit)以使其顯示。解決這個問題後,你會看到在父視圖左上角的按鈕都在彼此的頂部;您需要根據需要手動定位它們。

+1

這就像一個魅力。你們太棒了! – iamtoc

+0

這對於爲什麼沒有圖像顯示是完全合理的。感謝您提及這一點,並提供更好的選擇。 – iamtoc

1

我不認爲你可以直接在你的代碼中更改navigationController

一個更安全的方法是這樣的:

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

工具條途徑

的一個問題與添加UIButtonUIToolBar是按鈕的按鈕和定位的該寬度是難以控制

更簡單的方法

移除工具欄並將UIView放置在與您的工具欄相同的背景圖像上。現在,您可以將UIButton作爲子視圖添加到該視圖。這樣您可以更好地控制按鈕的位置和寬度。您也可以添加其他視圖。

相關問題