如果弹出框作为模型呈现,UITableViewController 将失去滚动功能

Posted

技术标签:

【中文标题】如果弹出框作为模型呈现,UITableViewController 将失去滚动功能【英文标题】:UITableViewController loses scroll functionality if presented by a popover as model 【发布时间】:2012-06-28 14:04:16 【问题描述】:

仅当弹出框控制器出现键盘时,模型表视图(UITableViewController)不滚动表的任何原因?

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

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

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

谢谢 杰夫

【问题讨论】:

当键盘出现时你是否改变了这个东西的框架? 不,不碰框架。 所以你只需要让单元格避开键盘吗? 你有和上一个问题一样的问题吗,***.com/questions/11243712/… 请放截图或一些代码。 【参考方案1】:

您的 UITableView 正在将其委托方法请求发送到弹出框的视图控制器而不是您的 UITableView 控制器,或者您的 UITableView 的委托设置为 nil。查看您在哪里实例化您的 TableView 并确保您正确设置了委托属性。

【讨论】:

当然,如果您发布您的代码,我们将很乐意帮助您更具体地找到错误。 不,事实并非如此 :) 三重检查了它。我将上传一个显示问题的迷你示例项目。除了添加到源代码的行/部分之外,几乎没有代码。 上传的示例项目:www.geoffcoope.co.uk/ios/testTVCScrolling.zip【参考方案2】:

我猜你的问题在于情节提要的 segue 显示弹出框控制器的方式。看起来这是一个普遍的问题。

因此,解决此问题的最简单方法是将模态窗口的创建移动到代码中。类似的东西:

在你的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,而不是在“显示表格”按钮上设置一个“内部修饰”代表。此委托将从ViewController 执行您的showNavigationController 方法(以NSNotificationCenter 为例)

【讨论】:

以上是关于如果弹出框作为模型呈现,UITableViewController 将失去滚动功能的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController 作为 iPhone 上的弹出框?

从 viewDidAppear 呈现时,模态弹出框控制器不显示其内容

presentViewController 不隐藏弹出框,弹出框出现在呈现的模态视图上

在通用故事板中使用 present 作为弹出框

试图关闭故事板呈现的弹出框

使用动画在 iPad 上呈现和隐藏​​弹出框