问题描述
我在 tableview 中有两个部分。顶部部分代表公共数据,在滑动时可以将其设为私有,然后将从第 1 部分中删除并显示在私有部分(第 2 部分)中。类似地,当第 2 部分(私有部分)中的一个单元格被点击时,需要将其添加回公共部分 1。我遇到了很多问题,所以我交替使用先删除该单元格,然后添加单元格(反之亦然),或删除并添加数据然后更新表格视图。在此先感谢所有帮助,我已经搜索堆栈溢出大约一个星期了,大约 6 到 10 年前的所有类似帖子都没有帮助。
-我猜这是 numberOfRowsInSection
方法的问题。我已经玩过这个了,我当前的版本在下面。
- 添加和删除单元格方法也存在问题。
代码如下
func numberOfSections(in tableView: UITableView) -> Int {
return numberOfSections
}
func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
var rowCount = 0
//return multidimsensional[section].count == 0 ? 1 : multidimsensional[section].count
switch section {
case 0:
rowCount = eisForMe.count == 0 ? 1 : eisForMe.count
case 1:
rowCount = hiddenEIs.count == 0 ? 0 : hiddenEIs.count
default: break
}
return rowCount
}
func tableView(_ tableView: UITableView,heightForRowAt indexPath: IndexPath) -> CGFloat {
return 140
}
func tableView(_ tableView: UITableView,editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
if indexPath.section == 1 {
return .insert
}
return .delete
}
func tableView(_ tableView: UITableView,commit editingStyle: UITableViewCell.EditingStyle,forRowAt indexPath: IndexPath) {
if editingStyle == .insert {
let hiddenObject = hiddenEIs[indexPath.row]
setPublicAgainDB(indexPath: indexPath)
let ct = self.eisForMe.count
//problem with this removing then deleting
hiddenEIs.remove(at: indexPath.row)
tableView.beginUpdates()
tableView.deleteRows(at: [indexPath],with: .automatic)
tableView.endUpdates()
eisForMe.append(hiddenObject)
tableView.beginUpdates()
tableView.insertRows(at: [IndexPath(row:ct,section:0)],with:.fade)
tableView.endUpdates()
checkNewEIArray()
print("add")
}
if editingStyle == .delete {
print("delete!")
}
}
func tableView(_ tableView: UITableView,trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
//remove section
let deleteAction = self.contextualDeleteAction(forRowAtIndexPath: indexPath)
let swipeConfig = UISwipeActionsConfiguration(actions: [deleteAction])
return swipeConfig
}
func contextualDeleteAction(forRowAtIndexPath indexPath: IndexPath) -> UIContextualAction {
let action = UIContextualAction(style: .normal,title: "Hide") { [self] (contextAction: UIContextualAction,sourceView: UIView,completionHandler: (Bool) -> Void) in
let futureCount = eisForMe.count - 1
if futureCount == 0 {
print("count 0,don't remove")
let banner = NotificationBanner(title: "Wait!",subtitle: "You need at least one public EI",leftView: nil,rightView: nil,style: .info)
banner.show()
delay(2.5,closure: {
banner.dismiss()
})
} else {
let hiddenObject = self.eisForMe[indexPath.row]
setHiddenDB(indexPath: indexPath)
hiddenEIs.append(hiddenObject)
let ct = self.hiddenEIs.count
tableView.beginUpdates()
tableView.insertRows(at: [IndexPath(row:ct,section:1)],with:.automatic)
tableView.endUpdates()
eisForMe.remove(at: indexPath.row)
tableView.beginUpdates()
tableView.deleteRows(at: [indexPath],with: .automatic)
tableView.endUpdates()
checkNewEIArray()
completionHandler(true)
}
}
// 7
action.image = UIImage(systemName: "eye.slash")
action.backgroundColor = Colorify.Marina
return action
}
您会注意到在 numberOfRowsInSection
中 eisForMe.count 可以是 1(无论是 1 还是 0 都会导致一些错误)但不是 hiddenEis,因为在填充之前它总是从 0 开始.变量 numberofsection
由以下方法确定:
@objc func editShownEIs () {
if !isTbvEditing { //not editing
addTBVSection()
tableView.isEditing = true
isTbvEditing = true
} else {
removeTBVSection()
rearrageEIS.pulse(alpha: 0.5)
tableView.isEditing = false
isTbvEditing = false
}
}
func addTBVSection() {
numberOfSections += 1
let indexSt = IndexSet(integer: numberOfSections - 1)
tableView.performBatchUpdates({
tableView.insertSections(indexSt,with: .top)
},completion: { (update) in
print("section added")
})
}
func removeTBVSection() {
numberOfSections -= 1
let indexSt = IndexSet(integer: numberOfSections - 1)
tableView.performBatchUpdates({
tableView.deleteSections(indexSt,with: .bottom)
},completion: { (update) in
print("section removed")
})
}
无论如何,我的基本想法是,例如,当点击第 0 部分中的一个单元格时:该单元格 a) 从 0 中移除并且 b) 同时插入到第 1 部分中(或者,一个接一个地插入)。同样,当第 1 节中的单元格被点击以插入第 0 节时,需要将其从第 1 节中删除并添加到第 0 节。 在此先感谢所有帮助,我已经搜索堆栈溢出大约一个星期了,大约 6 年前的所有类似帖子都没有帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)