以编程方式创建 UIToolbar

Posted

技术标签:

【中文标题】以编程方式创建 UIToolbar【英文标题】:creating a UIToolbar programmatically 【发布时间】:2013-03-17 20:53:12 【问题描述】:

我希望在用户单击按钮时以编程方式将 UIToolbar 添加到视图中(在我的情况下,当他们放大照片时)。

当我在 click 方法中创建工具栏并添加到子视图时,它似乎工作正常,但是如果我在 viewDidLoad 方法中创建工具栏,将其分配给实例变量,然后将该实例变量添加到子视图点击,什么都没有出现。调试器显示实例变量是 UIToolbar 并且不为空。我不想在每次单击时都创建和销毁相同的工具栏,所以我认为最好将其保留为我根据需要从视图中添加和删除的实例变量。这是正确的方法吗?

为什么它在一种情况下可见,而在另一种情况下不可见。

设置

@synthesize toolBar;

- (UIToolbar*)createToolbar

    UIToolbar* toolbar = [[UIToolbar alloc] init];
    toolbar.frame = CGRectMake(0, self.view.frame.size.height - 44, self.view.frame.size.width, 44); 
    UIBarButtonItem *shareButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(sharePhoto:)];
    NSArray *buttonItems = [NSArray arrayWithObjects:shareButton,nil];
    [toolbar setItems:buttonItems];
    return toolbar;


这行得通

- (void) clickMyButton 

    toolBar = [self createToolbar];
    [self.view addSubview:toolBar];

这不显示任何东西

- (void)viewDidLoad

    [super viewDidLoad];
 toolBar = [self createToolbar];


- (void) clickMyButton 

    [self.view addSubview:toolBar];

为什么在后一种情况下不起作用

【问题讨论】:

您的工具栏是通过强关联保留还是分配/弱? 【参考方案1】:

问题是当viewDidLoad 被调用时,不能保证你的视图和子视图的框架已经设置好了。尝试从viewWillAppearviewDidAppear 调用[self createToolbar]

【讨论】:

让它工作了,但发现了一件奇怪的事情。如果我将对 createToolbar 的调用移至 viewWillAppear,它将不起作用。但是,如果我从 createToolbar 方法中取出设置的框架线,并在调用 createToolbar 之后立即添加该线,它就可以工作。为什么当它被重构为方法本身时它不起作用,即使它仍然总是从 viewWillAppear 调用 奇怪...尝试仔细检查 ivar 名称与 createToolbar 中使用的变量名称。可能是您直接在 createToolbar 方法内设置 ivar 的框架,而不是设置将返回然后设置为 ivar 的工具栏的框架。 @Cezar appriciate!

以上是关于以编程方式创建 UIToolbar的主要内容,如果未能解决你的问题,请参考以下文章

无法隐藏以编程方式创建的 UIButton

Android 编程:如何以网格方式以编程方式创建各种视图类型

如何以编程方式创建“数据库创建脚本”?

如何以编程方式创建 UICollectionViewCell

dojo中以编程方式与以声明方式创建的小部件之间的区别?

以编程方式创建和显示 UIPickerView