метод рефакторинга объектив-с - PullRequest
1 голос
/ 24 февраля 2012

У меня есть следующий код:

-(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? Как я могу это сделать?

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

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

Ответы [ 2 ]

4 голосов
/ 24 февраля 2012

Вы можете ожидать 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 голосов
/ 24 февраля 2012

Вызовите вспомогательные методы, которые ожидают 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]]){
        //…
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...