我的UITableView
比窗口短,因此无需滚动。但是, 足够长,当选择底行中的文本字段时,键盘会覆盖它。
我不能使用scrollToRowAtIndexPath
,因为该表比窗口短,所以我想知道将它带入视图的正确方法是什么。
我正在考虑将整个视图滑动到一定数量的像素,虽然这看起来非常糟糕,因为如果我向表中添加更多行,它会破坏UI。
答案 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];
}
您必须根据自己的情况调整值(-105
,105
和0.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];
}