UIViewController 内的 iOS 自定义 UITableViewController

Posted

技术标签:

【中文标题】UIViewController 内的 iOS 自定义 UITableViewController【英文标题】:iOS Custom UITableViewController inside UIViewController 【发布时间】:2015-07-29 07:08:21 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

在您的父视图控制器类中,prepareForSegue(_: sender:) 将在您创建的每个“嵌入”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

【讨论】:

Tio eres el mejor(U R THE BEST)...非常感谢...这正是我所需要的! 乐于助人!介意将答案标记为正确吗? 对不起...也是新的堆栈...!现在就去做!【参考方案2】:

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

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

Click here to see what I'm talking about

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

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

【讨论】:

以上是关于UIViewController 内的 iOS 自定义 UITableViewController的主要内容,如果未能解决你的问题,请参考以下文章

UIViewController 内的 UITableView 没有响应(Swift 3.0)

仅自动旋转 UITabBar 内的一些选项卡? (iOS 5)

Swift - iOS 9:如何在 iOS 9 中呈现具有自定义大小的 UIViewController? [复制]

自定义UIViewController IOS4.3

iPhone IOS5 Storyboard,如何加载带有自定义 .xib 文件的 UIViewController?

为啥我的 UIViewController 被加载了两次? IOS 7