あなたが提供した2番目のリンクは非常に明確でした.
最良の例は iOS 7 です。今では状況はまったく異なります。たとえば、私が維持しているアプリケーションにはサブクラス化UIControl
された .動作します(内部を繰り返してsubviews
いくつかのものを置き換えます)。アプリが拒否されることはないかもしれませんが、維持するのは面倒です。
経験則として、UIButton に対して外部からできることはすべて、次のようになります。
[myButton setBackgroundImage:... forState:...];
[myButton setTextColor:... forState:...];
myButton.titleLabel.font = ...
カスタム サブクラス メソッドの内部に移動できます。
+ (UIButton*)fancyPantsButton
{
UIButton *button = [UIButton butonWithType:UIButtonTypeCustom];
[myButton setBackgroundImage:... forState:...];
[myButton setTextColor:... forState:...];
myButton.titleLabel.font = ...
return button;
}
init
これは、問題がある場合でも問題なく実行することもできawakeFromNib
ます (私は通常、後者を好みます)。
UIAppearence
ユーザーhw731によって提案されたように、オプションもあります。本当にあなたのボートを浮かせるものは何でも。
2番目の質問については、nibファイルはクラスのインスタンスを作成しsetValue:forKey:
、ロード時に使用して保存するものを埋めます(そのため、「クラスは何かのキー値に準拠していません」などのエラーが発生します) nib)、したがって、nib がロードされているときに何かが分類されている場合、はい、nib は単にinitWithCoder
.. を使用してギャップを埋めるため、カテゴリを尊重します。
また、同じように、IB の「ユーザー定義のランタイム属性」に明示的に追加しない限り、nib ファイルはカスタム プロパティを認識しないため、カスタム プロパティを入力することはできません (iOS 5 以降)。 )。
ペン先の別のテクニックは、
@property (strong) IBOutletCollection(UIButton) NSArray *buttons;
そして、それに応じてボタンを反復およびカスタマイズします(サブクラス、カテゴリ、ローカルメソッドなどを介して...)。このメソッドは、少数のカスタム ボタンだけが必要な場合に非常に役立ちますが、サブクラスの使用を保証するには十分ではありません。