当键盘出现时,如果由弹出控制器显示,模型表视图(UITableViewController)不会滚动表格的任何原因?
我基本上有一个带有按钮的弹出菜单,可以打开一个模型Tableview全屏,表格底部行内的文本字段在点击时会被键盘隐藏。
这与您必须手动管理滚动的UIView或Scrollview不同。 UITableViewController内置了这个功能,如果在层次结构的某个地方有一个弹出控制器,它就无法工作。
示例项目:www.geoffcoope.co.uk/ios/testTVCScrolling.zip
由于 杰夫
答案 0 :(得分:1)
您的UITableView将其委托方法请求发送到popover的视图控制器而不是您的UITableView控制器,或者您的UITableView的委托设置为nil。查看您实例化TableView的位置,并确保正确设置委托属性。
答案 1 :(得分:1)
我猜你的问题是故事板的segue显示popover控制器的方式。看起来这是一个常见的问题。
因此,解决问题的最简单方法是在代码中移动模态窗口的创建。这样的事情:
在ViewController.h
内写
@property (strong) UIPopoverController * popoverController;
- (void) showNavigationController;
在ViewController.m
内写
@synthesize popoverController;
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
[super prepareForSegue:segue sender:sender];
if ([segue isKindOfClass:[UIStoryboardPopoverSegue class]]){
if (popoverController) [popoverController dismissPopoverAnimated:NO];
UIStoryboardPopoverSegue * popoverSegue = (UIStoryboardPopoverSegue *) segue;
popoverController = popoverSegue.popoverController;
}
}
- (void) showNavigationController
{
[popoverController dismissPopoverAnimated:NO];
popoverController = nil;
UIStoryboard *ub = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *controller = [ub instantiateViewControllerWithIdentifier:@"navigationController"];
[self presentModalViewController:controller animated:YES];
}
然后在导航控制器的MainStoryboard集标识符navigationController
内,而不是在“显示表”按钮上设置“内部触摸”委托。该代表将从showNavigationController
执行您的ViewController
方法(例如,使用NSNotificationCenter
)