如果由弹出窗口作为模型呈现,UITableViewController将丢失滚动功能

时间:2012-06-28 14:04:17

标签: ios cocoa-touch scroll uitableview popover

当键盘出现时,如果由弹出控制器显示,模型表视图(UITableViewController)不会滚动表格的任何原因?

我基本上有一个带有按钮的弹出菜单,可以打开一个模型Tableview全屏,表格底部行内的文本字段在点击时会被键盘隐藏。

这与您必须手动管理滚动的UIView或Scrollview不同。 UITableViewController内置了这个功能,如果在层次结构的某个地方有一个弹出控制器,它就无法工作。

示例项目:www.geoffcoope.co.uk/ios/testTVCScrolling.zip

由于 杰夫

2 个答案:

答案 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