我希望以这样一种方式对UILabel
进行子类化,使得该类的用户无法直接通过text
设置label.text = @"foo"
。相反,我想根据一些值从子类内部设置文本。
我尝试了什么:
BalanceLabel.h:
@interface BalanceLabel : UILabel
@property(nonatomic,copy, readonly) NSString *text;
@end
但是,我收到一条警告,告诉我我正在限制text
访问权限(就像我想的那样),但如果我尝试直接使用text
设置,则不会出现任何编译时错误我的子类的一个对象。
答案 0 :(得分:3)
你不能这样做。作为一个简单的例子,为什么不这样做,只需考虑下面的代码应该如何表现:
UILabel *label = [[BalanceLabel alloc] init];
label.text = @"string";
该代码创建BalanceLabel
,但将其存储在UILabel
类型的变量中,这意味着.text
属性的后续设置无法知道您是否尝试制作该属性只在BalanceLabel
中显示。
不幸的是,你无能为力。您可以覆盖setter以抛出异常,这将让用户知道他们做错了什么,但当然也会使应用程序崩溃。
答案 1 :(得分:1)
您应该将逻辑放入管理视图的控制器中,而不是直接查看。
BalanceLabel
。