Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在单击或旋转之前,不显示UIView和UIButtons_Ios_Uiview_Uibutton_Custom Controls - Fatal编程技术网

Ios 在单击或旋转之前,不显示UIView和UIButtons

Ios 在单击或旋转之前,不显示UIView和UIButtons,ios,uiview,uibutton,custom-controls,Ios,Uiview,Uibutton,Custom Controls,这两天来我一直在为这个问题绞尽脑汁。谷歌搜索了很多,但还没有找到答案,所以我决定在这里寻求帮助。让我们看看我有没有运气 我正在编写一个可重用控件,该控件由一个UIView和数量可变的自定义UIButton组成。我实现了initWithFrame:、initWithCoder:和drawRect:,其中在绘制之前构建的按钮实际上被添加到视图中。由于在使用控件时应提供UIButton内容,所以所有操作都是以编程方式完成的,因此此UIView没有XIB 这个UIView,我们称之为Customizel

这两天来我一直在为这个问题绞尽脑汁。谷歌搜索了很多,但还没有找到答案,所以我决定在这里寻求帮助。让我们看看我有没有运气

我正在编写一个可重用控件,该控件由一个UIView和数量可变的自定义UIButton组成。我实现了initWithFrame:、initWithCoder:和drawRect:,其中在绘制之前构建的按钮实际上被添加到视图中。由于在使用控件时应提供UIButton内容,所以所有操作都是以编程方式完成的,因此此UIView没有XIB

这个UIView,我们称之为CustomizelBarButton,然后在UIViewController中使用,我们称之为MyTestViewController,上面有一个视图,我们称之为CustomizelBarButtonView

MyTestViewController的GUI设置在IB上,其中UIView绑定到类相应匹配的自定义BarButtonView

MyTestViewController是一个非常标准的类,除了ViewWillDisplay:它初始化按钮并将它们与其他一些选项一起传递给CustomizelBarButton

问题是,除了第一次,一切都很完美

我的意思是,当我在模拟器上运行应用程序时,我还没有在iPhone上尝试过,但我坚信这不是硬件问题MyTestViewController显示可定制的BarButtonView背景,而不是按钮。现在当你点击一个按钮的位置时,所有的按钮都会突然出现

我很困惑,因为定制的按钮drawRect:在奇怪的点击效果出现之前运行,按钮实际上被添加到子视图中

另一个提示提示我的帮助:如果你不点击按钮,那么你仍然没有按钮,但旋转设备,它们也会像变魔术一样出现

这可能是一件非常简单的事情,但我错过了它,我快发疯了

有人能帮忙吗


提前谢谢

您说过要在drawRect中添加按钮:。不要那样做。您需要在init方法中添加按钮。

感谢您的及时回复!问题是我的init方法不知道按钮。按钮是从描述按钮图像、标题等的数据对象的NSArray创建的。。。。NSArray是一个观察到的属性,因此该属性是在MyTestViewController调用CustomButtonBar的init方法后设置的。然后在观察到数组的更改后立即添加按钮。不要等到drawRect。非常感谢,Rob!你是个救生员!它工作得很好!只是想了解这个问题:你应该让我避开drawRect:?这不是苹果推荐的填充自定义UIView的方法吗?drawRect:用于绘制视图自己的内容,而不是添加子视图。如果您的视图负责更改屏幕上像素的颜色,则该代码应位于drawRect:。如果由其他视图负责,则在系统开始发送drawRect:messages之前,该其他视图需要位于视图层次结构中。drawRect:用于绘制视图自身的内容,而不是添加子视图-完美!这就是我要找的!非常感谢你所做的一切,罗伯!