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? [复制]