objective-c重构方法

时间:2012-02-23 22:40:30

标签: objective-c ios cocoa-touch

我有以下代码:

-(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 Controllers中,所以理想情况下我想把它放在一个帮助类中,对于iOS来说是一个新手,所以不知道从哪里开始。

为了简洁起见,我从方法中删除了大部分代码,但它的作用是在iOS键盘出现时将UI控件滑入视图。

2 个答案:

答案 0 :(得分: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];
    // ...
}

答案 1 :(得分: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]]){
        //…
    }
}