【发布时间】:2011-09-01 03:50:13
【问题描述】:
好吧,这很奇怪。我一直在努力调试它一个小时。
我创建了一个带有自定义视图的 UIBarButtonItem,这是一个分配有图像的 UIButton。代码如下
UIButton *btnAdd = [[[UIButton alloc] initWithFrame:CGRectMake(0, 0, 28, 28)] autorelease];
[btnAdd setImage:[UIImage imageNamed:@"btn_add"] forState:UIControlStateNormal];
[btnAdd addTarget:self
action:@selector(addBox)
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *add = [[UIBarButtonItem alloc] initWithCustomView:btnAdd];
self.navigationItem.rightBarButtonItem = add;
它位于扩展 UIViewController 上的我的 - (id)initWithNibName: 方法中
在 UIViewController 第一次出现时,按钮正常显示,并且工作正常。但是,如果我推到另一个视图控制器,然后回击,按钮是不可见的。
即使它不可见,该按钮仍然有效。我可以点击它,它的行为正常。我知道它是那里的原始 UIButton,因为我已经对其内存地址和其他属性进行了跟踪......它的隐藏属性是 FALSE,它的 alpha 属性设置为 1.00f
起初我认为这可能是一个深度问题,但我有代码在每个帧循环中将我的自定义 UINavigationBar 背景推到后面,并且没有任何变化。查看更新
这几乎就像是图像正在释放或在幕后,但指针也很好......
我猜这是一些奇怪的绘图怪癖,我只需要四处游荡,但谷歌很难解决这个问题。
任何提示将不胜感激。
更新
事实证明这是一个深度问题。我在drawRect上绘制一个自定义背景:,并且该代码确实将自定义背景推到了视图堆栈的后面,但是,这个方法只被私有框架方法调用一次......因此当栏被重绘后第一个视图,背景没有被强制退回,出于某种愚蠢的原因,它决定重绘它后面的按钮。
所以现在我正试图弄清楚如何在每次呈现 UINavigationBar 时强制将背景推回。
【问题讨论】:
-
最好在
viewDidLoad的导航栏中添加按钮。先试试这个。并尝试将该图像设置为所有 UIButton 状态。 -
我真的很高兴找到了这个,我正在经历同样的事情。下面的解决方案对我来说不够用,更像是黑客。但如果你已经解决了这个问题,我很想看看你做了什么。
标签: iphone objective-c ios cocoa-touch uikit