在UITableViewController(Swift)上添加button

我正在尝试添加一个uitableview控制器表视图的ontop。 视图控制器有一个导航控制器和静态单元,这就是为什么它是一个uitableviewcontroller而不是一个uiviewcontroller。 现在,我正在尝试在连接到导航控制器的屏幕底部添加一个button,以便它不会与表格视图一起滚动。

我正在尝试做类似于下面的内容。 它有一个顶部栏的导航控制器,静态单元格的表格视图,然后是一个button,但他们是如何做的button?

图片: http : //postimg.org/image/ilsmqqrip/

谢谢!

更新:如何使用带有使用Swift的静态单元格的tableview的uiviewcontroller?

我发现容器视图在这种情况下非常有用! 一个干净的解决scheme,很容易实现。

只需创build一个普通的UIViewController,添加你的button和一个ContainerView作为这个UIViewController的子视图(下图中的中间那个)。 最后,从ContainerView创buildEmbed Segue到你的UITableViewController(右边的那个)。

故事板

这样,您可以使用静态单元格原型,而不是仅限于UITableView在同一时间。

结果:

结果

我做了类似的UITableViewController和一个静态数据源。 我在我的tableview的footerview中添加了button。

为了使它alignment屏幕的底部,我需要在我的viewcontroller这个代码:

 override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) // Make footerview so it fill up size of the screen // The button is aligned to bottom of the footerview // using autolayout constraints self.tableView.tableFooterView = nil self.footerView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.tableView.frame.size.height - self.tableView.contentSize.height - self.footerView.frame.size.height) self.tableView.tableFooterView = self.footerView } 

简而言之,我调整了footerview,在删除table view的内容之后占据了所有剩余的空间。 由于button与自动布局的footerView的底部alignment,它将保持在屏幕的底部。

故事板:

故事板

结果如下:

模拟器

UITableViewController将占用整个空间,所以你将无法添加button。 使用UITableView手动添加,将基于UITableViewController的代码重构为UIViewController。 这样你就可以设置你的表格视图的大小,并把button放在最下面。

不幸的是UITableViewController有一个tableView作为它的顶层视图。 当然,如果你看视图debugging器,你可以看到tableview不是根视图。 因此,您可以编程方式将button添加到tableView的窗口。 如果你必须这样做,这可能是通过UITableViewController添加顶级元素的最简单的方法。 否则,如果你是在最初的devise中,你可以使用容器视图为你的button和一个UITableViewController为TableView。 这种方法的缺点是你最终有两个视图控制器,一个用于容器,另一个用于表格,并且通常需要将信息传递回去,以及在它们之间。 如果你使用的是swift,你可以通过在容器视图控制器类中嵌套tableViewcontroller来简化它。

如果你想在窗口中添加一个button,一旦你确定视图有一个窗口,你可以懒惰地做这个。 请注意,这些button属于窗口而不是视图控制器,所以当视图控制器消失时,您有责任去除它们。

  private weak var button: UIButton! ... override func didMove(toParentViewController parent: UIViewController?) { super.didMove(toParentViewController: parent) guard self.button == nil, let window = tableView.window else { return } let button = UIButton(frame: CGRect(x:0, y:40, width: 200, height: 20)) button.setTitle("This is a red button", for: .normal) button.backgroundColor = UIColor.red window.addSubview(button) self.button = button } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) button?.removeFromSuperview() } 

这是一个UIViewController,UITableView作为子视图添加。 在右上angular,你可以看到一个名为Content:Dynamic Prototypes的下拉菜单。 将其更改为静态单元格。 在这里输入图像说明