我有一个带有一些静态单元格的UITableViewController(用UITextFields填充)。现在我想将活动的UITextField保持在我的屏幕中间(即使我上/下一个Cell / UITextfield)。
我怎样才能做到这一点?
答案 0 :(得分:0)
我过去做了几次这样的事情,虽然不太喜欢。 我的解决方案是用桌子移动视图,这样选定的单元格就可以保持可见。
首先我添加了一些观察者来了解键盘出现或消失的时间
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShowNotification:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHideNotification:) name:UIKeyboardWillHideNotification object:nil];
然后我做了类似这样的事情来推动桌子:
- (void)keyboardWillShowNotification:(NSNotification*)notification {
CGSize kbSize = [[notification.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
double animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
CGPoint newCenter = self.myable.center;
NSLog(@"Height: %f Width: %f", kbSize.height, kbSize.width);
// Portrait: Height: 264.000000 Width: 768.000000
// Landscape: Height: 1024.000000 Width: 352.000000
if([[UIApplication sharedApplication] statusBarOrientation] < 3) {
newCenter = CGPointMake(newCenter.x, heightP - kbSize.height - self.myTable.frame.size.height/2);
}
else {
newCenter = CGPointMake(newCenter.x, heightL - kbSize.width - self.myTable.frame.size.height/2);
}
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:animationDuration];
self.myTable.center = newCenter;
[UIView commitAnimations];
}
- (void)keyboardWillHideNotification:(NSNotification*)notification {
NSLog(@"keyboard disappeared");
double animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
CGPoint newCenter = self.myTable.center;
if([[UIApplication sharedApplication] statusBarOrientation] < 3) {
newCenter = CGPointMake(newCenter.x, 0 + self.lmyTable.frame.size.height/2);
}
else {
newCenter = CGPointMake(newCenter.x, 0 + self.myTable.frame.size.height/2);
}
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:animationDuration];
self.myTable.center = newCenter;
[UIView commitAnimations];
}
基本上,我读了键盘高度并将其添加到桌子的中央,将其向上推,然后在键盘消失时移除相同的高度。
现在,有一个问题! 我从代码中删除了它,因为它非常具体,但是只有当键盘覆盖您的单元格时,您必须小心移动表 !否则,您最终会将可见单元格推到屏幕顶部。 这很大程度上取决于你的视图设置,边框,桌子的大小等等,所以我不能帮你这一部分,但我希望你有基本的想法!
祝你好运答案 1 :(得分:0)
更简单...在您的tableview的委托didSelectRowAtIndexPath
中使用scrollToRowAtIndexPath:<#(NSIndexPath *)#> atScrollPosition:<#(UITableViewScrollPosition)#> animated:<#(BOOL)#>
滚动到您的单元格。您可能必须为此更改tableview的框架,并在取消选择单元格后再将其更改回来。或者我们滚动插入属性滚动。