2012-02-23 9 views
1

私は次のコードを持って:あなたはそれをするUITextFieldに渡し見ることができるようにObjective-Cのリファクタリング方法

-(void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
CGRect textFieldRect = [self.view.window convertRect:textField.bounds fromView:textField]; 
CGRect viewRect = [self.view.window convertRect:self.view.bounds fromView:self.view]; 
... 

} 

を。私もこのコードを同じViewControllerで複製していますが、UITextViewを渡しています。

私はこれをUITextFieldまたはUITextViewのいずれかを渡す単一のメソッドにリファクタリングできるようにしたいですか?これどうやってするの?

また、このコードは他のView Controllerにも表示されるので、理想的には、iOSの新しいヘルパークラスに配置したいので、ここからどこに行くのか分かりません。

簡潔さのために、ほとんどのコードをこのメソッドから削除しましたが、iOSキーボードが表示されたときにUIコントロールが表示されるようにスライドされます。

答えて

4

これらのビューから特別なテキストプロパティを使用していないようですので、UIViewが期待できます。

-(void)textFieldDidBeginEditing:(UIView *)textField 
{ 
    CGRect textFieldRect = [self.view.window convertRect:textField.bounds fromView:textField]; 
    CGRect viewRect = [self.view.window convertRect:self.view.bounds fromView:self.view]; 
    // ... 
} 
3

共通のスーパークラスであるUIViewを必要とするヘルパーメソッドを呼び出します。

-(void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    return [self textBeginEditing:textField]; 
} 


-(void)textViewDidBeginEditing:(UITextView *)textView 
{ 
    return [self textBeginEditing:textView]; 
} 


-(void)textBeginEditing:(UIView *)view 
{ 
    //and if you need to do something, where you need to now, if it is a textView or a field, use 

    if([view isKindOfClass:[UITextField class]]){ 
     //… 
    } else if([view isKindOfClass:[UITextView class]]){ 
     //… 
    } 
} 
関連する問題