【问题标题】:Call viewController from xib从 xib 调用 viewController
【发布时间】:2016-01-19 18:24:08
【问题描述】:

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

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

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

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

上图中,“+”号为按钮,需要在底栏上方标有“这里”的位置显示UITableViewController

我是 iOS 新手,正因为如此,我的头撞到了墙上。

提前致谢!

【问题讨论】:

  • 有几种不同的方法可以让它工作。一种是使用child view controllers。一种更惯用的方法是使用 UIPopoverController,尽管它有自己的 UI,并且比手动操作提供的控制更少。

标签: ios objective-c iphone xib pushviewcontroller


【解决方案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,非常常见(UIPageViewControllerUINavigationController、...都使用这种机制)。

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

【讨论】:

    猜你喜欢
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 2021-04-11
    相关资源
    最近更新 更多