为什么我不能更改ViewController的UIView类的根视图

时间:2012-10-19 01:23:00

标签: ios uiview uiviewcontroller iboutlet

如果我使用单个视图模板启动Xcode程序,它将默认为VC和View已设置为该VC中的IBOutlet,以便我可以在我的View Controller中使用self.view访问它。 / p>

现在,如果我想要一个自定义UIView(称为NewView),我可以在我的项目中添加一个UIView类文件(.h / .m)。现在我最初的想法是转到故事板中的根“UIview”并将其类更改为“NewView”。

假设我在NewView中有一个名为“myProperty”的公共属性,我应该可以使用self.view.myProperty从我的VC访问它。事实并非如此!

我们是否说UIView的子类化的唯一方法是在SB中添加一个UIView对象,该对象位于根UIView之下,然后从VC创建一个IBOutlet到该UIView?那么如果我不能使用它那么根据UIView的用途。

1 个答案:

答案 0 :(得分:3)

这不是无法继承UIView的问题(正如您已经看到的那样),这是编译器识别您的子类的问题。 self.view被声明为指向UIView对象的指针,而不是您的子类的指针,因此您必须做一些额外的工作来访问它的属性;即:铸造。要访问“myProperty”,请使用[(NewView*)self.view myProperty];。就那么简单。

你必须向编译器施加一种承诺,即字面上指出“self.view具有类NewView,而不是你认为的那样,所以认识它就是这样。”

作为旁注,我还要确保XIB中根视图的类设置得恰当(意思是,它需要是NewView类,否则当你尝试发信息时,你的cast将失败并返回一个UIView对象,该对象不响应-myProperty,从而抛出一般异常。)