0

如果我使用单个视图模板启动 Xcode 程序,它将默认为一个 VC,并且一个已在该 VC 中设置为 IBOutlet 的视图,以便我可以self.view在我的视图控制器中使用它来访问它。

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

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

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

4

1 回答 1

3

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

您必须将其转换为一种对编译器的承诺,字面意思是“self.view拥有类NewView,而不是您认为的那样,因此请认清它。”

作为旁注,我还将确保正确设置 XIB 中的根视图的类(意思是,它必须是 class NewView,否则当您尝试向它发送消息时,您的演员将失败并返回一个UIView对象,它不响应-myProperty,从而引发通用异常)。

于 2012-10-19T02:35:16.180 回答