在 iOS 中转换 UIView 时遇到问题



我有一个名为FooView的类,它是UIView的子类,我正在尝试将UIView对象转换为FooView

我这样做如下

FooView *myView = (FooView*) MyViewController.view
NSLog(@"Leg is a class of %@",NSStringFromClass([myView class])); // Get UIView here.

MyViewController的 ivar 是一种UIView类型。

我得到一个 UIView 结果,知道为什么会这样吗?

强制转换是一种编译时操作。它不会神奇地改变对象的类型。它主要用于编译时检查和一点运行时魔术。 myView仍然是UIView,而不是FooView

问题中的这两行应该会给你答案:

MyViewController 的 ivar 是 UIView 类型。我得到一个UIView结果

所有 Objective-C 对象都有一个名为 isa 的指针,指向类型为 Class 的对象。强制转换不会更改该指针,也不会更改对象的大小。

如果要使用 FooView ,则需要更改控制器中的属性类型,如果您使用的是界面生成器,请在右侧的检查器中更改 UIView 的类型。

您可以在 MyViewController 中创建一个 loadView 方法,该方法创建一个 FooView 并将其设置为 self.view。它适用于不使用 NIB 的情况。

最新更新