如果我使用单个视图模板启动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的用途。
答案 0 :(得分:3)
这不是无法继承UIView
的问题(正如您已经看到的那样),这是编译器识别您的子类的问题。 self.view
被声明为指向UIView
对象的指针,而不是您的子类的指针,因此您必须做一些额外的工作来访问它的属性;即:铸造。要访问“myProperty”,请使用[(NewView*)self.view myProperty];
。就那么简单。
你必须向编译器施加一种承诺,即字面上指出“self.view
具有类NewView
,而不是你认为的那样,所以认识它就是这样。”
作为旁注,我还要确保XIB中根视图的类设置得恰当(意思是,它需要是NewView
类,否则当你尝试发信息时,你的cast将失败并返回一个UIView
对象,该对象不响应-myProperty
,从而抛出一般异常。)