0

如果一个子类被定义为MyView那个 subclasses UIView,并且在 Interface Builder 中,视图被点击,并且 Custom Class 已经被设置为MyView

但是在 ViewController 中viewDidLoad

 self.view.foo = ... ;

将创建一个编译错误,说foo不是UIView. 然后我打印出类self.view

NSLog(@"Class of view is %@", NSStringFromClass([self.view class]));

果然,它打印出来了MyView。此外,不仅第一行不会编译,Xcode 也不会“自动完成”单词“foo”。但很明显,该类打印出 no as UIViewbut is MyView,并且在我的类定义中MyView,我确实说过:

@property (nonatomic, strong) NSMutableArray *foo;

在接口.h文件中,也在实现.m文件中:

@synthesize foo;

并且MyView.h也是进口的ViewController.h。为什么会这样以及如何解决这个问题?

4

1 回答 1

3

您的 UIViewController 不知道它的视图是您的MyView子类的一个实例。

你需要投射它

MyView *myView = (MyView *)self.view;
myView.foo = @"Whatever";

如果你想简化这一点,你也可以继承 UIViewController 然后总是self.myView在你的 MyViewController 子类中引用而不是self.view

@interface MyViewController : UIViewController

@property (nonatomic, strong) MyView *myView;

@end


@implementation MyViewController
@synthesize myView;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
            self.myView = (MyView *)self.view;
    }
    return self;
}
@end
于 2012-05-26T20:51:12.633 回答