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 等
我是 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 等