从 xib 调用 viewController

Call viewController from xib

我有一个包含底栏视图的 .xib。它有一个显示视图的按钮。我几乎在每个视图控制器中都使用了底部栏,但即使搜索了两个多小时也无法使其工作。

点击底部栏工作正常(NSLog 显示当我点击它们时按钮动作被调用),但我找不到做我想做的事情的方法。该按钮需要在特定框架中显示 6-7 行的 UITableViewController,因此我不想完全使用屏幕。

|------|
|      |
|      |
|      |
|      |
|______|
|+_____|

|------|
|      |
|      |
|------|
| here |
|______|
|+_____|

上图中“+”号为按钮,需要在底栏正上方"here"的位置显示UITableViewController

我是 iOS 的新手,因此我正在用头撞墙。

提前致谢!

UITableViewController 需要使用整个屏幕。我不认为这是你想要的。

我只是创建一个 UIView 子类并向其添加一个 UITableView。然后,您可以将自定义视图作为子视图添加到当前视图。你的子类可以是数据源和委托,所以它可以完全 self-contained 所以你可以在应用程序的任何地方使用它。如果您想要检测 table 视图之外的点击以关闭自定义视图,它也可以是 full-screen 大小。只需将 backgroundColor 设置为 clearColor 并添加一个手势识别器来检测点击。

我认为您可能有一些比使用 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 并且很常见(UIPageViewControllerUINavigationController、...都使用此机制)。

但是因为我不太喜欢 UITableViewControllers 我建议创建一个简单的 UITableView 并将其添加为子视图。至于 delegatedataSource 都可以分成单独的 类 (和文件),这样你就可以避免臃肿的实现。