以编程方式创建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];
}
为什么不是在后一种情况下
问题工作那是viewDidLoad
被调用,但不能保证设置了视图和子视图的框架。请尝试从viewWillAppear
或viewDidAppear
改为拨打[self createToolbar]
。
得到它的工作,但注意到一个奇怪的事情。如果我将调用createToolbar移动到viewWillAppear中,它不起作用。但是,如果我将set frame行从createToolbar方法中取出,并且只需在createToolbar调用之后添加该行,就可以工作。为什么当它被重构到方法本身中时它不起作用,即使它始终从viewWillAppear – MonkeyBonkey 2013-03-17 21:30:03
中调用也是怪异的...尝试重新检查ivar名称与createToolbar中使用的变量的名称。这可能是因为您直接在createToolbar方法的内部设置了伊娃的框架,而不是设置将返回的工具栏的框架,然后将其设置为伊娃。 – Cezar 2013-03-17 21:35:08
@Cezar appriciate! – Kernelzero 2016-08-23 02:04:26
您的工具栏是保留有强关联还是分配/弱? – Shaun 2013-03-17 21:09:59