【问题标题】:How do I change UIToolbar buttons programmatically if created in Storyboard?如果在 Storyboard 中创建,如何以编程方式更改 UIToolbar 按钮?
【发布时间】:2014-03-16 01:43:24
【问题描述】:

在故事板中,我创建了一个 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 为空。

它怎么是空的?我 cntrl-click 拖到 DetailViewController.m 的顶部并添加了它。我尝试了强属性和弱属性。

【问题讨论】:

  • self.toolbar 上调用setItems:animated: 的行上设置断点。确认已到达断点,然后确保 self.toolbar 不是 nil
  • 我向 [self.toolbar setItems:animated] 添加了断点,即使调用了该方法,它也没有调用该语句。 self.toolbar 为空。怎么是空的?我 cntrl-click 拖动到 DetailViewController.m 的顶部并使其成为强指针?

标签: ios storyboard uitoolbar


【解决方案1】:

改变

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

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

同时添加

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

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

【讨论】:

  • 我试过了,没有任何改变。同样的错误。日志语句打印出 null。工具栏无效怎么来的?从情节提要中,我直接拖到文件的顶部,它为我创建了出口。
  • 所以问题出在无效的工具栏上。抱歉,没有足够的信息让我给你一些建议。
【解决方案2】:

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

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

[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 帮助我调试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多