2011-12-21 18 views
8

ですからのUIButtonFXLabelのインスタンスに変更しようとしています。 FXLabelhttps://github.com/nicklockwood/FXLabel)の詳細については、リンクをご覧ください。私はクラスの拡張(Subclass UIButton to add a property)を使用して知っている、私はいつも別のプロパティを追加することができます私のケースでは、FXLabelは基本的にサブビューを追加することによって。しかし、私はすでに便利な機能が好きです。UIButtonのUILabelをFXLabelに置き換えることはできますか?

FXLabelのサブクラスまたはカテゴリで「切り替える」方法はありますか?

私はこれを行うことができますが、それはそのようなハックであり、将来の証拠ではありません。クラスのタイプを変更する方法がわかりません(Get UILabel out of UIButton)。

UILabel *label; 
for (NSObject *view in button.subviews) { 
    if ([view isKindOfClass:[UILabel class]]) { 
     label = (UILabel *)view; 
     break; 
    } 
} 

思考ありがとう。

答えて

5

少なくともラベルにアクセスできる別の方法があります。 UIButtonのサブクラスを作成し、そのサブクラスでlayoutSubviewsをオーバーライドします。そこから直接ラベルにアクセスすることができます:

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    UILabel *titleLabel = [self titleLabel]; 
} 

これでラベルをサブクラスに変更する問題が解決しました。あなたはUILabelのクラスをFXLabelサブクラス(詳細はhere)と動的に入れ替えることができますが、それはかなり危険です。

あなたの心のコンテンツにカスタマイズできる自分自身のUIControlを作成したほうがよいと思います。リスクはなく、純粋な良さ。 UIButtonを模倣するのは難しいことではありません。がんばろう!

+0

チップをありがとう。私は自分のカスタムクラスを作成しようと考えています。誰も私に何かより良いものを与えてくれないなら、これを私の質問に答えるものとしてマークします。ありがとう! –

+1

私はちょうどそれをハッキングし、実際にボタンにテキストを設定することなく、ボタンの上にラベルを追加しました。今は、アルファ変更などの2つのプロパティを追跡する必要がありますが、自分のUIControlを作成するよりもはるかに簡単です。私は将来それに取り組み、何かが得られるかどうかを見ます –

1

申し訳ありませんが、私はあなたが信頼できる方法でこれを行うことができるとは思わない。 UIButtonをサブクラス化してtitleLabelメソッドをオーバーライドした場合でも、状態設定を処理する必要があります。内部コードがラベルのプライベートivarを直接参照するのは決してわかりません。

私のアプリが類似のもの(カスタムボタンレイアウト&サブビュー)を行うためのUIButtonのサブクラスを作成しました。申し訳ありませんが、今は共有できません。クライアントが所有しています。独自のサブビュー用に独自の状態処理コードを作成するのは難しくありません。

+0

ありがとうございました。私は一緒にまとめることができます。 –

関連する問題