我有一个由UIImageView组成的viewController,它填充整个视图,两个textField位于视图的中心。所有这些都位于ScrollView中。 我使用Storyboard,我禁用了自动布局。 当我单击textField,然后打开键盘时,我希望滚动直接在textField上移动。我怎么能这样做?
答案 0 :(得分:4)
请考虑将TextField插座命名为txtField
,然后使用
txtField.delegate = self;
考虑到您的ScrollView插座名为scrollView
。实现Textfield Delegate方法:
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
NSLog(@"%@",NSStringFromCGRect(textField.frame));
[scrollView scrollRectToVisible:textField.frame animated:YES];
}
希望这有帮助。
如果您需要更多帮助,请告诉我。
答案 1 :(得分:1)
答案 2 :(得分:0)
添加您的控制器作为键盘通知的观察者。收到通知时,请调整滚动视图框的大小和/或设置内容偏移(取决于您想要的确切效果和内容大小)。
答案 3 :(得分:0)
以下是我以前使用过的几个选项:
答案 4 :(得分:0)
您可以将文本字段坐标系转换为滚动视图坐标系。使用以下代码
-(void)rearrangeView{
// previous
if (txtActiveField == txtUsername) {
CGPoint pt;
CGRect rc = [txtUsername bounds];
rc = [txtUsername convertRect:rc toView:scrollViewLogin];
pt = rc.origin;
pt.x = 0;
pt.y -= 40;
[scrollViewLogin setContentOffset:pt animated:YES];
}
else if (txtActiveField == txtPassword) {
// [self.txtEmail becomeFirstResponder];
CGPoint pt;
CGRect rc = [txtPassword bounds];
rc = [txtPassword convertRect:rc toView:scrollViewLogin];
pt = rc.origin;
pt.x = 0;
pt.y -= 40;
[scrollViewLogin setContentOffset:pt animated:YES];
}
}
#pragma mark- UITextField Delegate
-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
txtActiveField = textField;
//txtActiveField.placeholder = @"";
[self rearrangeView];
return YES;
}
这里txtActiveField是UItextField类型的实例变量