我的情况是,我已经在JSON
的帮助下将tableView
数据加载到codable
中。在这里,我添加了tableView
单元格multiple
选中标记和deselect
。现在,如果我选择tableView单元格,我可以获取cell
数据,但是我想在一个array
中添加数据,如果我取消选择单元格,则应该从数组中remove
进行添加。所选单元格数据我要移至另一个ViewController
。我想知道该怎么做。
我的代码
// method to run when table view cell is tapped
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("You tapped cell number \(indexPath.row).")
if let cell = tableView.cellForRow(at: indexPath as IndexPath) {
if cell.accessoryType == .checkmark {
cell.accessoryType = .none
} else {
cell.accessoryType = .checkmark
let item = users[indexPath.row]
print(item) // here printing cell selection data
}
}
}
“我的小区选择”当前输出
You tapped cell number 1.
User(userId: "121”, active: 1, name: example_table.Name(firstname: "jack", lastname: "m"))
You tapped cell number 2.
User(userId: "122”, active: 1, name: example_table.Name(firstname: “rose”, lastname: “h”))
You tapped cell number 3.
User(userId: "123”, active: 1, name: example_table.Name(firstname: “makj”, lastname: “i”))
答案 0 :(得分:0)
您可以尝试
var selectedArr = [Item]()
var users = [Item]()
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("You tapped cell number \(indexPath.row).")
let item = users[indexPath.row]
if let cell = tableView.cellForRow(at: indexPath) { // you can also omit the if let and force-unwrap as in this case cell will never be nil
if cell.accessoryType == .checkmark {
cell.accessoryType = .none
selectedArr.remove(where:{ $0 == item })
} else {
cell.accessoryType = .checkmark
selectedArr.append(item)
}
}
}
然后在cellForRowAt
let cell = ////
let item = users[indexPath.row]
cell.accessoryType = selectedArr.contains(item) ? .checkmark : .none
还要确保名为Item
的模型符合Equatable
给予
for (index, element) in item.enumerated() {
print("Item \(index): \(element)")
}
给出
项目0:121,项目1:122,项目2:123
然后它是一个Ints数组,所以做
let res = item.map{ "\($0)" }.joined(separator: ",")
答案 1 :(得分:0)
因此,听起来您希望能够拥有一个包含所有选定用户的数组。然后您要做的就是在类声明中实例化一个这样的数组:
var users:[Users] = []
现在您应该做的是利用swift的协议来为您处理繁重的工作;意思是,当从Users数组中删除先前选择的用户时,您不需要for循环,而是需要更熟悉的东西:contains。
extension User: Equatable {
static func == (lhs: User, rhs: User) -> Bool {
return lhs.userId == rhs.userId
}
}
因此,现在您可以在删除或添加时调用它,例如:
var thisUser = User(userId: "123”, active: 1, name: example_table.Name(firstname: “makj”, lastname: “i”))
if users.contains(thisUser) {
users.removeAtIndex(users.indexOf(thisUser))
} else {
//Add the user to the array here for example
users.append(thisUser)
}
答案 2 :(得分:0)
不要使用额外的数组,只需将选定的信息添加到模型中即可。
get idNumber() {
if (this.identificationForm) {
return this.identificationForm.get('idNumber') as FormControl;
}
}
假设数据源数组声明为struct User : Codable {
var isSelected = false
// ... other members
}
,则根据users
中的isSelected
值设置选中标记
cellForRowAt
在override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let user = users[indexPath.row]
cell.accessoryType = user.isSelected ? .checkmark : .none
...
}
中,只需切换didSelectRowAt
并重新加载行
isSelected
要获取所有选定的用户,只需override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
users[indexPath.row].isSelected.toggle()
tableView.reloadRows(at: [indexPath], with: .none)
}
阵列
filter