我有一个主视图,包含我的所有文本字段和按钮。对于我的文本字段,我使用inputView来显示UIPickerViews而不是键盘。我想知道当选择文本字段时,我可以将视图向上移动,这样拾取器和拾取器工具栏不会覆盖文本字段,因为我在底部有一些文本字段被它覆盖。我尝试使用带有表视图的教程中的以下代码,但它对我不起作用。它构建没有错误,但它不能正常工作。视图刚刚消失,然后只有当pickerView被解除时它才会返回到一半。
- (void)viewDidLoad {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pickerShown:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pickerHidden:) name:UIKeyboardWillHideNotification object:nil];
}
-(void)pickerShown:(NSNotification *)note {
CGRect pickerFrame;
[[[note userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&pickerFrame];
CGRect scrollViewFrame = mainView.frame;
scrollViewFrame.size.height -= pickerFrame.size.height;
[mainView setFrame:pickerFrame];
}
-(void)pickerHidden:(NSNotification*)note{
[mainView setFrame:self.view.bounds];
}
这接近我需要做的事吗?
答案 0 :(得分:2)
我建议看一下this tutorial“滑动UITextFields以避开键盘”。
在您的情况下,您需要将textFieldDidBeginEditing
中的代码放在pickerShown
方法中,然后更改拾取器高度的键盘高度常量。
希望这会有所帮助:)
答案 1 :(得分:0)
对于那些寻找替代解决方案的人来说,这里是one。我把它变成了一个可以在复杂项目中重复使用的库。
/* In Keyboard.m */
static NSUInteger verticalOffset = 0;
+ (void)moveViewForKeyboard:(UITextField *)theTextField inView:(UIView *)view
{
/* Move 200 for keyboard, change the number for other types */
[self moveViewUp:view withOffset:theTextField.frame.origin.y - 200];
}
+ (void)moveViewUp:(UIView *)view withOffset:(int)offset
{
if(offset < 0)
offset = 0;
if(offset != verticalOffset)
{
[self moveView:view withOffset:offset - verticalOffset];
verticalOffset = offset;
}
}
+ (void)moveViewOnEndEditing:(UIView *)view
{
if(verticalOffset != 0)
{
[self moveView:view withOffset:-verticalOffset];
verticalOffset = 0;
}
}
+ (void)moveView:(UIView *)view withOffset:(int)offset
{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
CGRect rect = view.frame;
rect.origin.y -= offset;
rect.size.height += offset;
view.frame = rect;
[UIView commitAnimations];
}
在视图中以这种方式使用它:
- (void)textFieldDidBeginEditing:(UITextField *)theTextField
{
[Keyboard moveViewForKeyboard:theTextField inView:self.view];
}
- (void)textFieldDidEndEditing:(UITextField *)theTextField
{
[Keyboard moveViewOnEndEditing:self.view];
}