我有一个由填充整个视图的 UIImageView 和位于视图中心的两个 textField 组成的 viewController。所有这些都位于 ScrollView 中。我使用 Storyboard 并禁用了自动布局。当我单击 textField 并因此打开键盘时,我希望滚动直接在 textField 上移位。我怎样才能做到这一点?
问问题
3509 次
5 回答
4
考虑到您的 TextField 出口已命名txtField
,然后使用实现UITextField Delegate
txtField.delegate = self;
考虑到您的 ScrollView 插座被命名为scrollView
. 实现 Textfield 委托方法:
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
NSLog(@"%@",NSStringFromCGRect(textField.frame));
[scrollView scrollRectToVisible:textField.frame animated:YES];
}
希望这可以帮助。
如果您需要更多帮助,请告诉我。
于 2013-07-26T17:03:02.390 回答
1
我通常成功地使用它:http: //developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html
于 2013-07-26T16:57:03.687 回答
0
以下是我以前使用过的几个选项:
- 苹果的 Doco。请参阅标题为“移动位于键盘下方的内容”部分
- Cocoa With Love 文章,Sliding UITextFields around to avoid the keyboard
- 如果您的视图中有多个文本字段或其他表单元素,您也可以使用EZForm 之类的东西。它会自动重新定位视图以保持输入字段可见,还可以处理输入验证和其他有用的表单相关内容。
于 2013-07-27T09:22:34.590 回答
0
将您的控制器添加为键盘通知的观察者。当您收到通知时,调整滚动视图框架的大小和/或设置内容偏移量(取决于您想要的确切效果和您拥有的内容大小)。
于 2013-07-26T16:33:29.437 回答
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 类型的实例变量
于 2015-08-19T10:03:20.267 回答