繁体   English   中英

UIViewController 中的 iOS 自定义 UITableViewController

[英]iOS Custom UITableViewController inside UIViewController

我是iOS开发人员的新手,我来自Android开发人员,所以,我正在尝试这样做:

我想要一个storyboard ,顶部有一个表格视图,下面有一些按钮和文本字段。 如果我抓住一个TableViewController它会填满我的表格,但是,我无法调整表格的大小以放置buttons/textfields

直到现在我已经这样做了: storyboard这种方式嵌套: ViewController -> View -> TableView -> CustomCell (不起作用!)

我已经有一个Controller可以用它的自定义单元格填充我的表格视图。 但是,它仅在情节提要像这样嵌套时才有效: TableViewController -> TableView (工作但不能调整tableview大小)

我的主storyboard (我唯一的)有这个class

class SimpleController: UIViewController {

@IBOutlet weak var table =  UITableView();

override func viewDidLoad() {
    super.viewDidLoad()

   //The delegate works well when is called directly from a TableViewContoller
    //There's no error message but the table appears empty
    table?.delegate = UITCustomCell();
    table?.dataSource = UITCustomCell();
}

我也不确定这是否是最好的方法。 非常感谢!

我将创建一个父视图控制器,它有两个视图控制器作为包含的视图控制器,您可以使用界面构建器中对象库中的Container View元素进行设置:

在此处输入图片说明

将两个容器拖到这个父容器中并根据它们的大小,然后使用“嵌入”segue 类型,链接一个表视图控制器和另一个具有按钮的视图控制器:

在此处输入图片说明

在您的父视图控制器类中, prepareForSegue(_: sender:)将在viewDidLoad()之后为您创建的每个“嵌入”segue 调用一次,因此您可以获得对每个视图控制器的引用,如下所示:

class MyParentViewController: UIViewController {

    var buttonPanelViewController: MyButtonPanelViewController!
    var tableViewController: MyTableViewController!

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        if let tableViewController = segue.destinationViewController as? MyTableViewController {
            self.tableViewController = tableViewController
        }
        else if let buttonPanelViewController = segue.destinationViewController as? MyButtonPanelViewController {
            self.buttonPanelViewController = buttonPanelViewController
        }
    }
}

class MyTableViewController: UITableViewController {}

class MyButtonPanelViewController: UIViewController {}

最后,您需要确保在界面构建器中设置自动布局约束,以便整个事情的大小适合它将在其上运行的设备。 这是一个完整的“另一个话题,超出了这个问题的范围,但它是必不可少的!” 如果您不熟悉,这是一个很棒的教程: http : //www.raywenderlich.com/50317/beginning-auto-layout-tutorial-in-ios-7-part-1

我认为帕特里克林奇的回答很棒。 我还有两件事要补充,应该做这件事才能充分发挥作用(我还在学习,所以也许这些事情太基本了,甚至无法回答这个问题)。

在你按照他的帖子做完所有事情之后: 1. 创建新文件并使一个文件成为 ViewController,另一个文件成为 TableViewController。
2. 通过选择情节提要中的新场景之一,将情节提要中的每个视图附加到各自的新类,然后从实用程序屏幕中选择身份选择器,然后选择与您创建的新文件匹配的类。 Lynch 示例中的新 ViewController(称为 MyButtonPanelViewController)的按钮视图和 MyButtonPanelViewController 的 TableViewController。

单击此处查看我在说什么

我的名字在图片中略有不同。

完成上述操作后,您可以按住 ctrl-click-drag 按钮、文本字段、标签等从场景到适当的 ViewController,以使用 IBOutlet、IBAction 等访问视图中的项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM