如何在UITextField成为第一响应者时进行UIScrollView自动滚动
我已经看到这里的post,build议UIScrollViews
应该自动滚动,如果子视图UITextField
成为第一响应者; 然而,我不知道如何得到这个工作。
我有一个UIViewController
有一个UIScrollView
和UIScrollView
有多个文本框。
我知道如何手动做到这一点,如果有必要; 然而,从我一直在阅读,似乎有可能自动滚动。 请帮助。
我希望这个例子会帮助你你可以滚动到这个代码的任何一点。
scrollView.contentOffset = CGPointMake(0,0);
所以如果你有文本框,它必须有一些x,y的位置,所以你可以使用
CGPoint point = textfield.frame.origin ; scrollView.contentOffset = point
这应该做的伎俩,
但是如果你不知道何时调用这个代码,那么你应该学习UITextFieldDelegate方法
在你的代码中实现这个方法
- (void)textFieldDidBeginEditing:(UITextField *)textField { // Place Scroll Code here }
我希望你知道如何使用委托方法。
我知道这个问题已经被回答了,但是我认为我会分享@Adeel和@Basil所使用的代码组合,因为它似乎在iOS 9上完全适合我。
-(void)textFieldDidBeginEditing:(UITextField *)textField { // Scroll to the text field so that it is // not hidden by the keyboard during editing. [scroll setContentOffset:CGPointMake(0, (textField.superview.frame.origin.y + (textField.frame.origin.y))) animated:YES]; } -(void)textFieldDidEndEditing:(UITextField *)textField { // Remove any content offset from the scroll // view otherwise the scroll view will look odd. [scroll setContentOffset:CGPointMake(0, 0) animated:YES]; }
我也使用了animation方法,它使得过渡更平滑。
没有什么你必须手动。 这是默认行为。 有两种可能性,为什么你没有看到这种行为
- 最可能的原因是键盘覆盖了你的
UITextField
。 见下面的解决scheme - 另一种可能是你在
UITextField
和你想自动滚动的UIScrollView
之间的视图层次结构中有另一个UIScrollView
。 这是不太可能的,但仍然可以导致问题。
对于#1,你想要实现类似于苹果的build议移动位于键盘下的内容 。 请注意,Apple提供的代码不包含旋转。 为了改进他们的代码,请查看这篇博文的keyboardDidShow
方法的实现,该方法使用窗口正确地转换键盘的框架。
- (void)textFieldDidBeginEditing:(UITextField *)textField { CGRect rect = [textField bounds]; rect = [textField convertRect:rect toView:self.scrollView]; rect.origin.x = 0 ; rect.origin.y -= 60 ; rect.size.height = 400; [self.scrollView scrollRectToVisible:rect animated:YES]; }
你可以使用这个函数为UITextField的autoScroll
在UITextFieldDelegate
- (void)textFieldDidBeginEditing:(UITextField *)textField { [self autoScrolTextField:textField onScrollView:self.scrollView]; } - (void) autoScrolTextField: (UITextField *) textField onScrollView: (UIScrollView *) scrollView { float slidePoint = 0.0f; float keyBoard_Y_Origin = self.view.bounds.size.height - 216.0f; float textFieldButtomPoint = textField.superview.frame.origin.y + (textField.frame.origin.y + textField.frame.size.height); if (keyBoard_Y_Origin < textFieldButtomPoint - scrollView.contentOffset.y) { slidePoint = textFieldButtomPoint - keyBoard_Y_Origin + 10.0f; CGPoint point = CGPointMake(0.0f, slidePoint); scrollView.contentOffset = point; }
编辑:
我现在使用IQKeyboardManager的这个开发者的荣誉,你需要尝试这个。
如果您有多个文本Textfield1
,分别是Textfield2
, Textfield1
, Textfield2
,并且您希望textfield2成为第一个响应者时沿着y轴滚动滚动视图:
if([Textfield2 isFirstResponder]) { scrollView.contentOffset = CGPointMake(0,yourY); }