我的项目中有一个现有的ViewController + xib,现在我想添加一个带静态单元格的UITableView,如下所示:
但是当我将UITableView拖到我的屏幕上时,我没有在属性检查器中使用“Content> Static”菜单。
我已经尝试制作我的控制器子类UITableViewController,但这没有用 - 我仍然没有选择在Attributes Inspector中使用静态单元格。
我查看了StackOverflow,但没有找到这个问题的任何现有答案。所有现有问题都与故事板(我没有使用)有关,而不是与xib文件有关。
我的猜测是,当你将一个UITableViewController添加到一个故事板时,Xcode会产生某种魔力,但是当你将现有的xib更改为继承自UITableViewController时,它不会。
有关如何将静态单元格的表视图添加到现有xib的任何建议吗?
答案 0 :(得分:45)
静态表格视图单元格仅在使用故事板时可用。但是,如果您没有为整个UI使用故事板,您仍然可以将它们用于单个屏幕而不是屏幕集合。
要执行此操作,您可以创建一个UIStoryboard文件,其上有一个视图控制器,其文件所有者设置为您的自定义视图控制器子类。将VC的标识符设置为某个值。如果要显示它,请获取故事板,然后通过从故事板创建VC来实例化视图控制器子类。
UIStoryboard *tableViewStoryboard = [UIStoryboard storyboardWithName:@"your storyboard" bundle:nil];
CustomViewController = [tableViewStoryboard instantiateViewControllerWithIdentifier:@"custom identifier"];
您可以像往常一样在自己的应用中展示此VC。
这是开始使用故事板而不必转换整个应用程序以使用它们的好方法。
答案 1 :(得分:26)
没有故事板,这是可行的:
表格单元格控件的事件应该转到处理程序例程......
第4步的示例:
答案 2 :(得分:0)
为了扩展BVB的答案,当涉及到10号时,这里是您的tableview委托方法的Swift 3片段。请务必在xib中的所有单元格中添加插座。
手动创建表格视图部分时,请记住indexPath
等于表示表格结构的二维数组。例如,当indexPath
传递给tableView(cellForRowAt indexPath: IndexPath)
等于[1][0]
时,您的单元格将被放置在第二部分的第一个位置。
可以使用indexPath
和indexPath.row
属性从indexPath.section
中提取值。使用这些值,您可以按照您喜欢的顺序手动构建IBOutlets中的部分。
@IBOutlet var is_enabled: UITableViewCell!
@IBOutlet var is_public: UITableViewCell!
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
switch(section){
case 0:
return "Cell 1"
case 1:
return "Cell 2"
default: return ""
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
print("index path here", indexPath)
if(indexPath.section == 0) {
return is_enabled
}
else if(indexPath.section == 1) {
return is_public
} else {
return is_enabled
}
}