从 xib 调用 viewController
Posted
技术标签:
【中文标题】从 xib 调用 viewController【英文标题】:Call viewController from xib 【发布时间】:2016-01-19 18:24:08 【问题描述】:我有一个包含底部栏视图的 .xib。它有一个显示视图的按钮。我几乎在每个视图控制器中都使用了那个底栏,即使搜索了两个多小时,我也无法让它工作。
在底部栏中单击工作正常(NSLog
显示当我单击它们时正在调用按钮操作),但我找不到做我想做的事情的方法。该按钮需要在特定框架中显示 6-7 行的 UITableViewController
,因此我不想完全使用屏幕。
|------|
| |
| |
| |
| |
|______|
|+_____|
|------|
| |
| |
|------|
| here |
|______|
|+_____|
上图中,“+”号为按钮,需要在底栏上方标有“这里”的位置显示UITableViewController
。
我是 ios 新手,正因为如此,我的头撞到了墙上。
提前致谢!
【问题讨论】:
有几种不同的方法可以让它工作。一种是使用child view controllers。一种更惯用的方法是使用UIPopoverController
,尽管它有自己的 UI,并且比手动操作提供的控制更少。
【参考方案1】:
UITableViewController 期望使用整个屏幕。我不认为这是你想要的。
我只需创建一个 UIView 子类并向其中添加一个 UITableView。然后,您可以将自定义视图作为子视图添加到当前视图。您的子类可以是数据源和委托,因此它可以完全独立,因此您可以在应用程序的任何位置使用它。如果您想检测在表格视图之外点击以关闭自定义视图,它也可以是全屏大小。只需将 backgroundColor 设为 clearColor 并添加手势识别器即可检测点击。
【讨论】:
真的谢谢你,你让我从另一个角度看到了这一点,而且效果很好。谢谢楼主【参考方案2】:我认为您可能有一些比使用UITableViewController
更好的选择,但还是这样:
您基本上想添加一个子视图控制器。可以这样完成(这将在Swift
中,但我也可以添加ObjC
版本):
func buttonTap(sender: UIButton)
let viewController = UITableViewController(style: .Plain)
viewController.willMoveToParentViewController(self)
self.addChildViewController(viewController)
viewController.view.frame = CGRectMake(0, 0, self.view.bounds.width, self.view.bounds.height * 0.5)
self.view.addSubview(viewController.view)
viewController.didMoveToParentViewController(self)
这称为创建container view controller,非常常见(UIPageViewController
、UINavigationController
、...都使用这种机制)。
但是,由于我不太喜欢UITableViewControllers
,我建议创建一个简单的UITableView
并将其添加为子视图。至于delegate
和dataSource
,两者都可以分离到单独的类(和文件)中,这样可以避免实现臃肿。
【讨论】:
以上是关于从 xib 调用 viewController的主要内容,如果未能解决你的问题,请参考以下文章
通过 loadNibNamed() 从 xib 加载按钮从未调用
如何通过推送从 xib 转换到 ViewController