Objective c 更改私有实现中的属性类类型
我在iOS上有一个类,它有一个其他对象可以读取的Objective c 更改私有实现中的属性类类型,objective-c,Objective C,我在iOS上有一个类,它有一个其他对象可以读取的UIView属性。为了这个类的内部实现,我希望这个视图是UIView的一个自定义子类,但是这个类的客户机不需要知道这一点。对他们来说,此属性应该也将像任何其他UIView一样运行 理想情况下,我想要的是这样的东西 MyViewController.h: @property (nonatomic, readonly) UIView *aView; MyViewController.m: @property (nonatomic, readwrite
UIView
属性。为了这个类的内部实现,我希望这个视图是UIView
的一个自定义子类,但是这个类的客户机不需要知道这一点。对他们来说,此属性应该也将像任何其他UIView
一样运行
理想情况下,我想要的是这样的东西
MyViewController.h:
@property (nonatomic, readonly) UIView *aView;
MyViewController.m:
@property (nonatomic, readwrite) CustomView *aView;
编译器允许我这样做,但它实际上并不理解我想做什么。它不允许将.aView
作为CustomView
对象发送消息,它只允许我将其作为常规UIView
对象发送消息
我目前的一个解决办法就是这样做
CustomView *newView = [[CustomView alloc] initWithFrame:CGRectZero];
[newView customViewMessage];
self.aView = newView;
有更好的方法吗?我更喜欢的方法是给私有财产起一个不同的名字。然后实现公共属性的getter并返回内部属性的实例变量 例如: Class.h
@interface Class : NSObject
@property (nonatomic, readonly) UIView *aView
@end
Class.m
@interface Class ()
@property (nonatomic, retain) CustomView *cView;
@end
@implementation
- (UIView *)aView {
return _cView;
}
@end
因为您使用的是视图控制器,所以您可以这样做 第一步。 例如,添加私有属性
@property(nonatomic, readonly) CustomView *customView;
并重写getter以返回视图
-(CustomView *)customView{ return (id)self.view; }
通过这种方式,您可以使用该属性调用特定于类的方法,而无需每次强制转换该属性,并且任何其他对象都可以与视图控制器的视图进行交互,就像它们与任何其他视图控制器进行交互一样
步骤2
由于您使用的是视图控制器,因此有两个选项:
loadView
方法,并在其中创建视图:
-(void)loadView{ self.view = [CustomView new]; }
当然我现在真的记得很久以前做过这件事……真不敢相信我竟然没有想到。