我有一个UITextField,在选中时会被键盘隐藏。它怎么能被看到?

时间:2011-06-11 22:12:09

标签: iphone uitableview uitextfield

我的UITableView比窗口短,因此无需滚动。但是, 足够长,当选择底行中的文本字段时,键盘会覆盖它。

我不能使用scrollToRowAtIndexPath,因为该表比窗口短,所以我想知道将它带入视图的正确方法是什么。

我正在考虑将整个视图滑动到一定数量的像素,虽然这看起来非常糟糕,因为如果我向表中添加更多行,它会破坏UI。

3 个答案:

答案 0 :(得分:2)

您应该在相关的类中实现这些方法:

- (void) textFieldDidBeginEditing:(UITextField *)myTextField
{
    [self animateTextField:myTextField up:YES];
}

- (void) textFieldDidEndEditing:(UITextField *)myTextField
{
    [self animateTextField:myTextField up:NO];
}

- (void) animateTextField: (UITextField*) textField up: (BOOL) up
{
    int movement = (up ? -105 : 105);

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:0.3f];
    self.view.frame = CGRectOffset(self.view.frame, 0, movement);
    [UIView commitAnimations];
}

您必须根据自己的情况调整值(-1051050.3f)。

答案 1 :(得分:1)

您可以通过设置footerView的高度来使整个tableView向上滑动。键盘将移动上面的表格作为页脚的高度

-(CGFloat)tableView:(UITableView*)tableView heightForFooterInSection:(NSInteger)section
{
return 70.0;
}

答案 2 :(得分:0)

Pierre的代码对我有用,但我删除了myTextField参数。这似乎没必要。我还将其更改为UITextViews,因为这是我在代码中所拥有的。否则,谢谢你的问题和答案。我一直在靠墙攻击,以解决这个问题!

#pragma mark - Text View Delegate

- (void)textViewDidBeginEditing:(UITextView *)textView
{
    [self animateTextViewUp:YES];
}

- (void) textViewDidEndEditing:(UITextView *)textView
{
    [self animateTextViewUp:NO];
}

- (void) animateTextViewUp:(BOOL)up
{
    int movement = (up ? -80 :80);

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:0.3f];
    self.view.frame = CGRectOffset(self.view.frame, 0, movement);
    [UIView commitAnimations];
}