2012-04-19 11 views
0

私はUITextFieldをサブクラス化しており、フィールド内のテキストが変更されたときには何らかのコードを実行する方法が必要です。サブタイトルUITextFieldのsetText:(NSString *)テキストメソッド

(このクラスのロジックを記述すると、それより外側のコードを書くことができます...私はUITextFieldDelegateを使用して質問していますが、クラス外からしかアクセスできません)。

答えて

-1

UITextFieldDelegateメソッドを使用してでないコードをどのように除外しますか?? MVC設計のパラダイムを壊しているのは、ビュークラス(あなたのUITextField)に、コントローラが行うことを意図した変更にどのように対応するかを伝えることです。デリゲート実装での処理とは対照的に、setTextをオーバーライドする方がクリーンであると思われる理由についてもう少し詳しく知ることができますか?あなたのViewControllerの.hファイルで

+0

UITextFieldはビュークラスです。 NSStringはここのモデルクラスです。 –

+0

絶対に。更新しました。 – jmstone617

+1

カスタムクリアボタンを作成するには、これが必要です。そのため、実行するコードは、テキストがないときにボタンを消すもの、フィールドにテキストをクリアするボタンです。 – Francesco

0

ちょうどテキストフィールドのテキストは、この方法を変更したときに、これはデリゲートメソッドが

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 

       .....Do Somthing Here.... 

} 

..ですこのdeledate .Mファイルの使用怒鳴るコードでその後

@interface yourviewcontroller <UITextFieldDelegate> 

を定義します毎回 と呼ばれる。

1

カスタムクリアボタンが必要な同じ使用例がありました。私はUITextFieldをサブクラス化しようとしましたが、setTextをオーバーライドすることを望んでいましたが、望みどおりの文字が入力または削除されるたびに呼び出されることはありません。私は、次の解決策を考え出した:我々は、テキストの変化に反応することができUIControlEventEditingChangedを使用

- (void)awakeFromNib { 
    [super awakeFromNib]; 
    self.clearButtonMode = UITextFieldViewModeNever; 
    UIButton *clearButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 20, 20)]; 
    [clearButton setTitle:@"x" forState:UIControlStateNormal]; 
    [clearButton addTarget:self action:@selector(clearText:) forControlEvents:UIControlEventTouchDown]; 
    self.rightView = clearButton; 
    [self addTarget:self action:@selector(textChanged:) forControlEvents:UIControlEventEditingChanged]; 
} 

- (void)textChanged:(UITextField *)sender { 
    self.rightViewMode = sender.text.length > 0 ? UITextFieldViewModeWhileEditing : UITextFieldViewModeNever; 
} 

- (void)clearText:(UIButton *)sender { 
    self.text = @""; 
    [self textChanged:self]; 
} 

キーボードではなく、コード内のテキストを設定することによってもたらされます。私はclearText:メソッドによってもたらされたテキストにも応答したいので、私はtextChanged:メソッドをクリアの後に手動で呼び出す必要があります。テキストが別の場所でコード内に設定されている場合、補正するためにtextChangedを呼び出す必要があります。

関連する問題