在故事板中,我创建了一个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的顶部并添加它。我尝试了强大和弱的属性。
答案 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帮助我调试