如果在Storyboard中创建,如何以编程方式更改UIToolbar按钮?

时间:2014-02-16 22:29:43

标签: ios storyboard uitoolbar

在故事板中,我创建了一个DetailViewController,底部有一个UIToolbar,还有一个按钮。

有些特殊时间我想要使用另一组按钮来呈现此视图控制器。

当我想使用额外按钮以模态方式呈现视图控制器时,我必须以编程方式从故事板中初始化视图控制器,如下所示:

DetailViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"Detail"];

[controller newButtons:YES];
[self presentViewController:controller animated:YES completion:nil];

在DetailViewController.m文件中,我有上面调用的方法:

-(void) newButtons: (BOOL) isNew
{
    if (isNew) {
        UIBarButtonItem *doneItem = [[UIBarButtonItem alloc]
                                     initWithBarButtonSystemItem:UIBarButtonSystemItemDone
                                     target:self
                                     action:@ selector( save:)];

        UIBarButtonItem *cancelItem = [[UIBarButtonItem alloc]
                                       initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
                                       target:self
                                       action:@ selector( cancel:)];

       NSArray *buttonArr = [[NSArray alloc] initWithObjects:doneItem, cancelItem, nil];

    [self.toolbar setItems:buttonArr animated:YES];


    }
}

我已经通过单击拖动到文件顶部创建了一个从故事板到DetailViewController.m文件的插座:

@property (weak, nonatomic) IBOutlet UIToolbar *toolbar; 

这些是所有步骤,但是当我单击按钮以显示视图控制器时,它只显示视图控制器,其中包含故事板中的原始按钮,而不是我以编程方式添加的2个新按钮。

为什么没有显示新按钮。我从newButtons方法记录了一个测试语句,它肯定会调用它。只是没有添加按钮???

更新

我将断点添加到[self.toolbar setItems:animated]并且它没有调用语句,即使调用了该方法。 self.toolbar为null。

怎么会是null?我按住Ctrl键单击拖动到DetailViewController.m的顶部并添加它。我尝试了强大和弱的属性。

2 个答案:

答案 0 :(得分:0)

更改

@property (weak, nonatomic) IBOutlet UIToolbar *toolbar; 

@property (strong, nonatomic) IBOutlet UIToolbar *toolbar; 

同时添加

NSLog(@"%@", self.toolbar );

到newButtons方法检查工具栏是否有效。

答案 1 :(得分:0)

啊,我找到了答案! 视图控制器在您呈现之前不会初始化!

所以我只需要切换代码的​​顺序。我打电话的时候:

[controller newButtons:YES];

致电之前:

[self presentViewController:controller animated:YES completion:nil];

self.toolbar未初始化。

我必须首先呈现View Controller然后self.toolbar成立

[self presentViewController:controller animated:YES completion:nil]; 
[controller newButtons:YES];

感谢@Avt& @rmmaddy帮助我调试