我试图使用SWRevealViewController创建一个Slide side out菜单,但是我无法使用image + Hello,Name ...来扩展TableView和配置文件...
我所能做的就是:
基本上如何制作可扩展的TableView和配置文件。
有没有如何做到这一点的例子?
答案 0 :(得分:5)
据我所知,你想要一个可扩展的表格视图,即:点击表格中的一行,会出现更多选项。
我过去使用以下方法实现了这一目标:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if let cell = tableView.cellForRowAtIndexPath(indexPath) as? OuterCell{
if let object = data[indexPath.row] as? OuterObject{
if(object.open == false){
data.insert(InnerObject(content: object.innerContent), atIndex: indexPath.row + 1)
tableView.beginUpdates()
tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: indexPath.row + 1, inSection: 0)], withRowAnimation: .Left)
tableView.endUpdates()
}else{
data.removeAtIndex(indexPath.row + 1)
tableView.beginUpdates()
tableView.deleteRowsAtIndexPaths([NSIndexPath(forRow: indexPath.row + 1, inSection: 0)], withRowAnimation: .Left)
tableView.endUpdates()
}
object.open = !object.open
}
}
}
基本上这里发生的是TableView的dataSource
由此示例中的data
数组表示。这是您连接到所有TableViewDelegate
挂钩的内容。
在数据数组中,我持有两种类型的对象: OuterObject 和 InnerObject 。
OuterObject 包含它包含的内部对象的所有信息,如果单击它,它将动态地将其子项添加到数据数组中。
示例数据(我使用JSON导致其易于阅读和理解,您必须迅速代表这一点)
[
{
name="Ensino",
type="outerObject",
open=true
childObjects=[
{
name="Servico",
type="innerObject"
},
{
name="Avaliacao",
type="innerObject"
}
]
},
{
name="Pesquisa",
type="outerObject",
open=false
childObjects=[]
}
]
所以在你的情况下,你需要一个" Ensino"对象,带有包含以下数据的子属性:Avaliaco,Servicos等等......
外部对象还保持状态,无论它是打开还是关闭,如果再次单击它,就可以知道删除属于它的所有内部对象。
在这个例子中,我已经将OuterObject硬编码为总是最多只有一个子节点,你必须修改代码才能更聪明地根据有多少个子对象在外部插入/删除时插入/删除多少个对象你点击的对象有。
通过调用tableView.beginUpdates()
,tableView.beginUpdates()
,tableView.insertRowsAtIndexPaths()
,您将访问允许在更新数据时进行动画转换的方法。
解决这个问题的关键是创建一个智能数据源,然后利用Apple在UITableView
中实现的方法来实现它。
如果您需要更多帮助,请与我们联系,这是一个高级TableView
主题。
答案 1 :(得分:1)
检查此示例代码dropdown menu
这可能会给你一些想法。