我的UIView里面有两个UIViews。这是我的观点:
在关注文本字段时,会显示键盘,键盘会隐藏我的文本字段。我想在键盘之前移动整个TextField View。我在stackoverflow上找到了代码示例: iPhone Keyboard Covers UITextField
这是代码:
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[self animateTextField: textField up: YES];
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
[self animateTextField: textField up: NO];
}
- (void) animateTextField: (UITextField*) textField up: (BOOL) up
{
const int movementDistance = 80; // tweak as needed
const float movementDuration = 0.3f; // tweak as needed
int movement = (up ? -movementDistance : movementDistance);
[UIView beginAnimations: @"anim" context: nil];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: movementDuration];
self.view.frame = CGRectOffset(self.view.frame, 0, movement);
[UIView commitAnimations];
}
我正在努力实现这一点,但我遇到了麻烦。有人可以解释如何正确地做到这一点吗?
答案 0 :(得分:1)
而不是手动执行此操作。使用TPKeyboardAvoidingScrollView。 它易于使用。
首先使用UIScrollView并将所有视图放在其中。
要与UITableViewController类一起使用,请将TPKeyboardAvoidingTableView.m和TPKeyboardAvoidingTableView.h拖放到项目中,并使您的UITableView成为xib中的TPKeyboardAvoidingTableView。如果您没有在控制器中使用xib,我知道没有简单的方法可以使其UITableView成为自定义类:阻力最小的路径是为它创建一个xib。
对于非UITableViewControllers,将TPKeyboardAvoidingScrollView.m和TPKeyboardAvoidingScrollView.h源文件放入项目中,将UIScrollView弹出到视图控制器的xib中,将滚动视图的类设置为TPKeyboardAvoidingScrollView,并将所有控件放在该滚动视图中。您也可以在不使用xib的情况下以编程方式创建它 - 只需使用TPKeyboardAvoidingScrollView作为顶级视图。
答案 1 :(得分:0)
You could write it manually using something like this:
- (void)makeRoomForKeyboard
{
UIView *rootView = [[[UIApplication sharedApplication]delegate] window].rootViewController.view.subviews[0];
[UIView animateWithDuration:0.2f animations:^{
rootView.center = CGPointMake(rootView.center.x, rootView.center.y - kKeyboardOffset);
} completion:nil];
}
And play around with the kKeyboardOffset as you see fit. Call this from textFieldDidBeginEditing. When you finish editing, the same function can be called with just a + sign in front of the kKeyboardOffset.