2012-02-23 3 views
1

У меня есть следующий код: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]; 
... 

} 

Как вы можете видеть, что это проходит в UITextField. У меня также есть этот код, дублированный в том же ViewController, но проходящий в UITextView.

Я хочу, чтобы иметь возможность реорганизовать это в один метод, который проходит либо в UITextField, либо в UITextView? Как я могу это сделать?

Также этот код появляется в других контроллерах View, поэтому я хотел бы поместить его в класс-помощник, очень новый для iOS, поэтому не уверен, куда идти отсюда.

Я удалил большую часть кода из метода для краткости, но то, что он делает, - это сглаживание элементов управления пользовательского интерфейса, когда появляется клавиатура iOS.

ответ

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]]){ 
     //… 
    } 
} 
Смежные вопросы