如果弹出框作为模型呈现,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 呈现时,模态弹出框控制器不显示其内容