以编程方式创建UIToolbar

问题描述:

我希望在用户单击按钮时(在我的情况下,当他们放大照片时)以编程方式将UIToolbar添加到视图中。以编程方式创建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]; 
} 

为什么不是在后一种情况下

+0

您的工具栏是保留有强关联还是分配/弱? – Shaun 2013-03-17 21:09:59

问题工作那是viewDidLoad被调用,但不能保证设置了视图和子视图的框架。请尝试从viewWillAppearviewDidAppear改为拨打[self createToolbar]

+0

得到它的工作,但注意到一个奇怪的事情。如果我将调用createToolbar移动到viewWillAppear中,它不起作用。但是,如果我将set frame行从createToolbar方法中取出,并且只需在createToolbar调用之后添加该行,就可以工作。为什么当它被重构到方法本身中时它不起作用,即使它始终从viewWillAppear – MonkeyBonkey 2013-03-17 21:30:03

+0

中调用也是怪异的...尝试重新检查ivar名称与createToolbar中使用的变量的名称。这可能是因为您直接在createToolbar方法的内部设置了伊娃的框架,而不是设置将返回的工具栏的框架,然后将其设置为伊娃。 – Cezar 2013-03-17 21:35:08

+0

@Cezar appriciate! – Kernelzero 2016-08-23 02:04:26