UIViewController中的iOS自定义UITableViewController

时间:2015-07-29 07:08:21

标签: ios swift uitableview user-interface uiview

我是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();
}

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

2 个答案:

答案 0 :(得分:4)

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

enter image description here

将两个容器拖入此父级并根据它们调整大小,然后使用“embed”segue类型,链接一个表视图控制器和另一个包含按钮的视图控制器:

enter image description here

在您的父视图控制器类中,prepareForSegue(_: sender:)将在您创建的每个“embed”segue之后调用viewDidLoad()一次,因此您可以像这样获取每个视图控制器的引用:

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 :(得分:1)

我认为帕特里克林奇的答案很棒。我还有两件事需要补充,为了完全发挥作用(我还在学习,所以也许这些东西太基础了,甚至无法回答这个问题)。

从你的帖子做完所有事情后: 1.创建新文件,使其成为ViewController,另一个成为TableViewController 2.通过在故事板中选择一个新场景,然后从“工具”屏幕中选择“身份选择器”,然后选择与您创建的新文件匹配的类,将故事板中的每个视图附加到新的相应类。 Lynch示例中的新ViewController(名为MyButtonPanelViewController)和MyButtonPanelViewController的TableViewController的按钮视图。

Click here to see what I'm talking about

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

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