【问题标题】:On iOS, why does no such property exist when ViewController's view is set to my UIView subclass?在 iOS 上,当 ViewController 视图设置为我的 UIView 子类时,为什么不存在这样的属性?
【发布时间】:2012-05-26 20:41:33
【问题描述】:

如果一个子类被定义为MyView,它是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”。但很明显,该类打印出的不是UIView,而是MyView,并且在我的MyView 的类定义中,我确实说过:

@property (nonatomic, strong) NSMutableArray *foo;

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

@synthesize foo;

并且MyView.h 也被导入到ViewController.h 中。为什么会这样以及如何解决这个问题?

【问题讨论】:

    标签: iphone objective-c ios uiview uiviewcontroller


    【解决方案1】:

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

    你需要投射它

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

    如果你想简化这一点,你也可以继承 UIViewController,然后总是在你的 MyViewController 子类中引用 self.myView 而不是 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
    

    【讨论】:

    • 每次都需要这样的转换吗?这很麻烦......我也尝试在返回(MyView *)的ViewController中定义我自己的view方法并且代码确实return (MyView *) super.view;但仍然...... Xcode不会自动完成并且仍然会抱怨@没有这样的属性987654329@
    • -(MyView*)getView { 返回 (MyView*)self.view; } 那没用?
    • 如果您要经常使用 self.view 并希望避免强制转换,您需要重新定义 UIViewController 子类中的 view 属性,使其属于您的特定子类。
    • @JoshHudnall - 在我打字的时候让我的评论过时了,不错!
    • @jrturton :) 我们肯定朝着同一个方向前进。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2020-12-30
    相关资源
    最近更新 更多