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

Ios 如果在脚本中创建UIToolbar按钮,如何以编程方式更改?,ios,storyboard,uitoolbar,Ios,Storyboard,Uitoolbar,在故事板中,我创建了一个DetailViewController,底部有一个UIToolbar和一个按钮 在某些特殊情况下,我希望为这个视图控制器提供一组可选的按钮 当我想用额外的按钮以模式显示视图控制器时,我必须从情节提要以编程方式初始化视图控制器,如下所示: DetailViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"Detail"]; [controller n

在故事板中,我创建了一个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; 
这些都是步骤,但当我单击按钮显示视图控制器时,它只显示带有故事板中原始按钮的视图控制器,而不是我通过编程添加的两个新按钮。

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

更新:


我在[self.toolbar setItems:animated]中添加了断点,它没有调用该语句,即使调用了该方法。self.toolbar为空

为什么它是空的?I cntrl单击拖动到DetailViewController.m的顶部并添加它。我尝试了强属性和弱属性

变化

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

还加

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

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

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

所以我不得不改变代码的顺序。当我打电话时:

[controller newButtons:YES];
致电前:

[self presentViewController:controller animated:YES completion:nil];
self.toolbar未初始化

我必须首先展示视图控制器,然后self.toolbar就出现了

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

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

在调用
setItems:animated:
self.toolbar上的
设置断点。确认已到达断点,然后确保
self.toolbar
不是
nil
。我将断点添加到[self.toolbar setItems:animated]中,即使调用了该方法,它也没有调用该语句。self.toolbar为空。为什么它是空的?我单击并拖动到DetailViewController.m的顶部,使其成为强指针?我尝试了此操作,但没有任何更改。同样的错误。log语句正在打印出null。工具栏无效,怎么回事?从故事板我直接拖到文件的顶部,它为我创建了一个出口。所以问题出在无效的工具栏上。对不起,没有足够的信息让我给你提建议。
[self presentViewController:controller animated:YES completion:nil]; 
[controller newButtons:YES];