从xib调用viewController

时间:2016-01-19 18:24:08

标签: ios objective-c iphone xib pushviewcontroller

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

单击底栏可以正常工作(NSLog显示单击它们时正在调用按钮操作),但我无法找到方法来执行我想要的操作。该按钮需要在特定帧中显示一个UITableViewController 6-7行,所以我不想完全使用该屏幕。

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

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

在上图中,“+”符号是按钮,需要在底部栏上方标有“此处”的位置显示UITableViewController

我是iOS的新手,因为这个我正在撞墙。

提前致谢!

2 个答案:

答案 0 :(得分:2)

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

我只是创建一个UIView子类并向其添加一个UITableView。然后,您可以将自定义视图作为子视图添加到当前视图中。您的子类可以是数据源和委托,因此它可以是完全独立的,因此您可以在应用程序的任何位置使用它。如果要检测表视图外部的点击以关闭自定义视图,它也可以是全屏大小的。只需使用backgroundColor clearColor并添加一个手势识别器来检测水龙头。

答案 1 :(得分:0)

我认为你可能有更好的选择,而不是使用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,两者都可以分成单独的类(和文件),这样就可以避免膨胀的实现。