在 Swift 中在 UITableViewController 顶部添加一个 UIView

4
我目前使用UITableViewController(PFQueryTableViewController),我想在TableView上方显示一个UIView。
理想情况下,我希望在Storyboard中完成这个操作,这样我就可以轻松地添加其他标签/按钮。但是,我似乎无法弄清楚如何在Storyboard中实现它。是这样吗?
我尝试了以编程方式实现。我首先在顶部创建了变量: var filterLabelView:UIView = UIView() 然后在ViewDidLoad中添加了以下内容:
filterLabelView.frame = CGRect(x: self.view.frame.width/2, y: self.view.frame.height/2, width: self.view.frame.width, height: 40)
filterLabelView.center = CGPointMake(self.view.frame.size.width  / 2, self.view.frame.size.height / 2)
filterLabelView.backgroundColor = UIColor.redColor()
self.view.addSubview(filterLabelView) // See below

我也尝试了:

self.view.insertSubview(filterLabelView, aboveSubview: tableView)

这将创建一个红色的UIView,但它似乎被嵌入到了tableview中,因为当我上下滚动时,该View也会移动。
我想要创建的是:
理想情况下,我希望该视图位于屏幕底部,并且在用户滚动时移动。下面是我想要它看起来的示例截图:

enter image description here

我看到最好的方法是在UIViewController中使用一个包含UITableView的视图,但考虑到我的应用程序已经建立得很多,我不想采取这种方法。

有人能帮我创建这个外观吗?提前感谢。

1个回答

5
您需要从UIViewController派生以获取完整的布局控制。
然后在Storyboard中简单地添加一个UITableView实例。通常约束它,边缘刷新,顶部刷新,并使customView.top = tableView.bottom。向您的控制器添加一个普通输出。
您只需要记住让您的自定义UIViewController采用通常的数据源和委托协议,并将其分配为那些角色的属性初始化UITableView(通常是viewDidLoad())。
还有一个与在viewDidAppear()上清除所选单元格相关的技巧,但除了具有内置的tableView属性和自动分配委托以及非常不灵活的布局之外,UITableViewController没有任何特殊之处。

根据评论的补充:绕过此问题的方法类似于询问是否有任何方法使螺丝刀将钉子钉入木头中。只需使用正确的工具。 UITableViewController 的顶级 view 属性即为 UITableView 本身。请参见下面的示例,一个没有其他内容、零代码的股票 UITableViewController 在布局调试模式下。

这意味着所有子视图都会随它一起滚动,因为整个视图树都嵌入了一个可滚动的实体。

重新在Storyboard中制作这一个VC并不应该是什么大问题。毕竟,在cellForRowAtIndexPath中的渲染代码以及您的数据源和委托通常不会改变。

补充2:

不熟悉Parse的情况下,可能无法实现这一点。(!感谢Parse。)如果Parse没有提供可嵌入自己的可分离的PFQueryTableView,则可能可以使用以下解决方法,但您需要理解Objective-C代码:

https://www.parse.com/questions/pfquery-tableview-for-uiviewcontroller

enter image description here


谢谢您的回复。我已经阅读了那个。这是唯一实现这个的方法吗?我的应用程序现在已经相当庞大了,我想尽量避免重新构建我的主屏幕。您认为还有其他方法吗?提前致谢。 - Nick89
@Nick89 使用 UIViewController 可能是最好的选择,除非你的 tableview 只有一个 section,那么你可以设置 viewForHeaderInSection 并将其固定。 - kye
@kye 你好Kye,能教我如何添加它吗?我以前没有添加过。 - Nick89
@BaseZen 感谢您再次修改您的答案,即使我使用 PFQueryTableViewController 进行设置,我是否仍然可以更改为普通 VC? - Nick89
@Nick89,你可以简单地为你的tableview添加一个viewForHeaderInSection。我认为默认情况下,UITableView会固定显示头部(在滚动时显示)。请记住,这不会重新创建你想要的布局(如屏幕截图所示),最好的选择是像上面的答案中所述使用UIViewController - kye
@Nick89,解析比我想象的更加严格,请看附录2。 - BaseZen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接