1

我想以UILabel这样一种方式进行子类化,即类的用户不能text直接通过label.text = @"foo". 相反,我想根据某些值从子类内部设置文本。

我尝试了什么:

平衡标签.h:

@interface BalanceLabel : UILabel
@property(nonatomic,copy, readonly)   NSString *text;
@end

但是,我收到一条警告,告诉我我正在限制访问(就像我想要的那样),但是如果我尝试直接使用我的子类的对象text来设置,我不会收到任何编译时错误。text

4

2 回答 2

3

你不能这样做。作为一个关于为什么不这样做的简单示例,只需考虑以下代码的行为方式:

UILabel *label = [[BalanceLabel alloc] init];
label.text = @"string";

该代码创建了一个BalanceLabel,但将其存储在一个类型为 的变量中UILabel,这意味着该.text属性的后续设置无法知道您试图将该属性设置为只读BalanceLabel

不幸的是,您对此无能为力。您可以覆盖 setter 以引发异常,这将使用户知道他们做错了什么,但当然也会使应用程序崩溃。

于 2013-11-03T20:10:58.197 回答
1

您应该将逻辑放入管理视图而不是直接查看的控制器中。

  • 我假设您有一些使用新值更新的视图,并且您想BalanceLabel根据这些新值进行更新。
  • 您的控制器是您的视图的委托,因此它从用户或应用程序的其他模块接收新值,这些模块填充了新值(例如从文件加载,从网络下载等)。
  • 然后,您的控制器会确定哪些视图需要更新并设置新值-在您的情况下计算余额,我假设
于 2013-11-03T22:59:24.203 回答