在单击或旋转之前未显示带有 UIButtons 的 UIView
Posted
技术标签:
【中文标题】在单击或旋转之前未显示带有 UIButtons 的 UIView【英文标题】:UIView with UIButtons not showing up prior to click or rotate 【发布时间】:2012-01-24 16:35:41 【问题描述】:过去两天我一直在纠结这个问题。谷歌搜索了很多,但还没有找到答案,所以我决定在这里请求一些帮助。看看我有没有运气。
我正在编写一个可重复使用的控件,该控件由 UIView
和可变数量的自定义 UIButtons
组成。我实现了initWithFrame
:、initWithCoder
: 和drawRect
: 按钮(在绘图之前构建)实际上被添加到视图中。一切都以编程方式完成,因为在使用控件时应提供 UIButton
内容,因此此 UIView
没有 XIB。
这个UIView
,我们称它为CustomizableBarButton
,然后在UIViewController
中使用,我们称它为MyTestViewController
以查看它,我们称它为customizableBarButtonView
。
MyTestViewController
的 GUI 在 IB 上设置,其中 UIView
与 customizableBarButtonView
相关联(相应的类匹配)。
MyTestViewController
's 是一个非常标准的类,除了 viewWillAppear
:它初始化按钮并将它们与其他一些选项一起传递给 CustomizableBarButton
。
问题是一切正常...除了第一次!
我的意思是,当我在模拟器上运行应用程序时(我还没有在 iPhone 上尝试过,但我坚信这不是硬件问题)MyTestViewController
显示customizableBarButtonView
背景而不是按钮.现在当你点击一个按钮应该是所有按钮的地方突然出现!
我很困惑,因为 CustomizablebarButton
drawRect: 在奇怪的“click n'appear”效果之前运行并且按钮实际上被添加到子视图中。
我的帮助的另一个提示:如果你不点击按钮(所以你仍然没有按钮)但旋转设备它们也会像魔法一样出现!
这可能是一件非常简单的事情,但我错过了它,我快疯了......
有人可以帮忙吗?
提前致谢!
【问题讨论】:
【参考方案1】:您说您要在drawRect:
中添加按钮。不要那样做。您需要在 init 方法中添加按钮。
【讨论】:
感谢您的及时回复!问题是我的 init 方法不知道按钮。按钮是从描述按钮(图像、标题等)的数据对象的 NSArray 创建的。 NSArray 是一个观察到的属性,所以该属性被设置 AFTER MyTestViewController 调用 CustomButtonBar 的 init 方法。 然后,只要您观察到数组的变化,就添加您的按钮。不要等到drawRect。 非常感谢,罗伯!你是救生员!它工作得很好!只是想了解问题:我应该回避drawRect:吗?这不是 Apple 推荐的“填充”自定义 UIView 的方式吗?drawRect:
用于绘制视图自己的内容,而不是用于添加子视图。如果您的视图负责更改屏幕上像素的颜色,则该代码应位于drawRect:
中。如果其他视图负责,则在系统开始发送drawRect:
消息之前,该其他视图需要位于视图层次结构中。
"drawRect: 用于绘制视图自己的内容,而不是用于添加子视图" - 完美!这就是我要找的!非常感谢您所做的一切,Rob!以上是关于在单击或旋转之前未显示带有 UIButtons 的 UIView的主要内容,如果未能解决你的问题,请参考以下文章