我有以下代码:
-(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控件滑入视图。
答案 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]]){
//…
}
}