2016-05-02 6 views
1

私はテーマ戦略を有効にするためにサブタイプUIViewControllerにしました。UITextFiledが描画されているときに検出する

つまり、私のUIViewControllersMyUIViewControllerというoverrideという数字をviewWillLayoutSubviewsとしています。したがって、ページが読み込まれるとき、私はsetupViewというメソッドを呼び出すことで、私の背景や他のスタイルやアニメーションを適切に設定することができます。

私はUITextFieldのために同じことをしました。しかし、私が実行している問題は、UITextFieldクラスで、ビューが現れるたびに呼び出されるメソッドを見つけることができないということです。

基本的な質問は、UITextFieldsviewWillLayoutSubviewsまたはviewDidLoadです。

いくつかのソリューション:イベントで

私は、私が本当に好きいけないwhihc次のソリューションを持って呼び出されるものはないということ。

ViewControllerを使用して
  1. 、ビューコントローラがあり、与えられたビューがUITextFieldを入力している場合は、そのスタイル

  2. 登録を設定することの私の延長で静的メソッドを呼び出すことサブビューのすべてを反復処理私のサブクラスUITextFieldと通知センターがあり、私がテーマを変更したら、通知を送信します。

しかし、彼らはクラス自体は、それがビューに来るとき行う必要がある何を持つほど素敵ではありません、私は上記の方法の両方をテストしていると、彼らは仕事をします。

要約すると、UITextFieldクラスでオーバーライドできるメソッドがあるかどうかを知りたいときは、ビューが有効になるたびに通知されます。 superview値がnilと異なる場合

答えて

2

func didMoveToSuperview()UIViewクラスから継承されたメソッドは、ちょうどそれをancheチェックをオーバーライドし、これはUItextFieldをサブクラス化するために必要となります。

説明このメソッドの既定の実装では何も行いません。 サブクラスは、スーパービューが変更されるたびに追加のアクションを実行するためにサブクラスをオーバーライドできます。

しかし、私はあなたが過度に複雑になっているように見えます。テキストフィールドで何をしようとしているのか少し説明できますか?
[UPDATE]
テーマをビューコントローラ全体のビューに適用するには、できることがたくさんあります。簡単な方法はコントローラを表示するNSNotificationviewDidLoad()です。 viewDidLoad()メソッドは、View Controllerがそのビューをロードしたときに呼び出されます。つまり、実行時にビューを追加しない場合、その時点でUIがロードされます。ここでメソッドapplyTheme(theme:ThemeObject)を呼び出すことができます - もちろん、あなたはあなたのサブビューのカスタマイズを適用することができます - 何とかThemeObjectを渡す必要があります。実行時にテーマを変更する場合は、NSNotificationを使用して、テーマを選択した後でテーマの1つをディスパッチすることもできます。登録されたオブザーバーはすべて、applyTheme(theme:ThemeObject)メソッドを呼び出してカスタマイズを追加できます。
振る舞いを少し抽象化したい場合は、プロトコル "Themable"を作成し、プロトコル拡張の各種類UIViewサブクラスに実装を追加できます。私はちょうどUIKitには、同様のプロトコルを提供することを覚えておくことも必要

あなたはcustom implementationsを見つけることができますグーグルで、UIApperenceと呼ばれる、それは強力なプロトコルが外観を与えたために価値がある本当にです。

+0

ユーザーは自分のアプリに入れたい「テーマ」を選択できます。現在、それはフォントと背景色を意味します。これは、フォント、フォントの色、フォントのサイズ、および境界の色を変更する必要があることを意味します。あなたがこれに別のアプローチをしているかどうか聞いてみたい。これは私にとっても複雑に思えます。 – Cripto

+0

私は答えを – Andrea

+1

更新しましたあなたの答えを試すには時間がかかりました。それが動作することを確認できます。 – Cripto

関連する問題