1

クラスのユーザーがを介して直接UILabel設定できないようにサブクラス化したいと思います。代わりに、いくつかの値に応じてサブクラス内からテキストを設定したいと思います。textlabel.text = @"foo"

私が試したこと:

BalanceLabel.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

残念ながら、これについてできることはあまりありません。セッターをオーバーライドして例外をスローすることもできます。これにより、ユーザーは何が間違っていたかを知ることができますが、もちろんアプリもクラッシュします。

于 2013-11-03T20:10:58.197 に答える
1

ビューを直接管理するのではなく、ビューを管理するコントローラーにロジックを配置する必要があります。

  • BalanceLabel新しい値で更新されるビューがあり、これらの新しい値に基づいて更新したいとします。
  • コントローラーはビューのデリゲートであるため、新しい値を入力したユーザーまたはアプリの他のモジュール (ファイルからの読み込み、ネットワークからのダウンロードなど) から新しい値を受け取ります。
  • 次に、コントローラーは、ビューのどのビットを更新する必要があるかを判断し、新しい値を設定します-あなたの場合、バランスを計算すると思います
于 2013-11-03T22:59:24.203 に答える