iOS UIViewController 内的自定义 UITableViewController

iOS Custom UITableViewController inside UIViewController

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

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

到目前为止,我已经这样做了: storyboard 以这种方式嵌套:ViewController -> View -> TableView -> CustomCell(不起作用!)

我已经有一个 Controller 可以用它的自定义单元格填充我的 table 视图。但是,它仅在故事板像这样嵌套时才有效: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 元素进行设置:

将两个容器拖到这个父容器中并根据它们调整大小,然后使用 "embed" segue 类型、link 一个 table 视图控制器和另一个具有您的按钮的视图控制器:

在您的父视图控制器 class 中,prepareForSegue(_: sender:) 将在 viewDidLoad() 之后为您创建的每个 "embed" 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

我认为 Patrick Lynch 的回答很棒。我还有两件事情要补充,应该完成才能使它充分发挥作用(我还在学习,所以也许这些事情太基础了,甚至无法回答这个问题)。

完成他的所有操作后 post: 1. 新建文件,一个ViewController,一个TableViewController.
2. 通过 select 故事板中的一个新场景,然后 select 实用程序屏幕中的身份选择器,将故事板中的每个视图附加到它们各自的新 类,然后选择 Class 匹配您创建的新文件。 Lynch 示例中的新按钮视图 ViewController(称为 MyButtonPanelViewController)和 TableViewController 到 MyButtonPanelViewController.

Click here to see what I'm talking about

图片中我的名字略有不同

完成上述操作后,您可以按住 Ctrl 键并单击并将按钮、文本字段、标签等从场景中拖到适当的位置 ViewController 以访问您视图中的项目使用 IBOutlet、IBAction 等