1

UIButton の配列があり、配列をループせずに、すべてのタイトルを一度に特定の値に設定したいと考えています。私が見つけた唯一の解決策は、キー値コーディングによるものです。つまり、次のようなものです。

[self.board setValue:@"X" forKeyPath:@"titleLabel.text"];

ただし、ボタンのtitleLabelプロパティは読み取り専用であり、変更できません。ボタンのtitleプロパティをキーパスとして使用しようとしましたが、どちらも機能しません。

KVCを使用してすべてのボタンの「有効」プロパティを一度に変更することでこれを行ったことがありますが、うまく機能しましたが、タイトルを変更したい場合は機能しません(これはさまざまな状態の複数のタイトルを許可する UIButton の新しい ControlState 機能)。

それで、配列からすべてのボタンのタイトルを変更するためのワンライナーソリューション(ループなし)を持っている人はいますか?

4

3 に答える 3

1

実際、KVC は機能しており、テキスト値を設定しています。Apple ドキュメントから:このプロパティは読み取り専用ですが、独自のプロパティは読み取り/書き込み可能です。これらのプロパティを使用して、ボタン ラベルの外観を構成します。したがって、textLabel は UILabel であり、UILabelテキストプロパティは読み取り専用ではありません。動作していないように見える理由は、デフォルト値が (0, 0, 0, 0) であるラベルのフレーム サイズではなく、UILabel のテキストのみを変更しているためです。たとえば、デフォルト値の "( three blanks )"でボタンを初期化すると( nilではなく))その後、動作します。(ただし、iOS がボタンをクリックした後にボタンの値を初期値にリセットする問題はまだあるようです)

于 2012-09-12T15:34:37.620 に答える