我有一个UITableView,它在三个部分中显示带有复选标记的列表。当检查一行时,与该NSObject类关联的bool从false变为true。我在UINavigationBar中有一个按钮,按下时会显示带有“发送”和“取消”选项的警报。当用户点击“发送”时,我希望将带有复选标记的所有行添加到数组中。我认为使用bool将是最好的方法,但在动作的func中我无法调用与数组中的每个NSObject相关联的bool。我包含了我认为需要的部分代码来帮助我。
编辑:我相信这是我设置课程的方式,除非我误解。其中一个'vars'是var选择的:Bool“然后当我从该类创建一个Item时我将它设置为false。我有一个在cellForRowAt中显示正常的项目列表,但是当点击该按钮时,我无法访问相同的“sortedList”。这是更多的代码。也许我还在遗漏别的东西?var arrayOfItemsSelected = [String]()
var sortedItems = [[Item]]()
var itemList: ItemList! {
didSet {
sortedItems = itemList.sortByBrands()
self.tableView.reloadData()
}
}
覆盖func tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath) - > UITableViewCell { let item = sortedItems [indexPath.section] [indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "UIItemViewCell", for: indexPath)
cell.textLabel?.text = "\(item.name)"
cell.detailTextLabel?.text = "\(item.style)"
cell.accessoryType = cell.isSelected ? .checkmark : .none
cell.selectionStyle = .none // to prevent cells from being "highlighted"
return cell
}
func confirmButtonPressedAction() {
// Create the alert controller
let alertController = UIAlertController(title: "List of checked items", message: stringOfSelectedItems, preferredStyle: .alert)
// Create the actions
let okAction = UIAlertAction(title: "Send", style: UIAlertActionStyle.default) {
UIAlertAction in
self.arrayOfItemsSelected.removeAll()
self.tableView.reloadData()
}
let cancelAction = UIAlertAction(title: "Cancel", style: UIAlertActionStyle.cancel) {
UIAlertAction in
}
// Add the actions
alertController.addAction(okAction)
alertController.addAction(cancelAction)
// Present the controller
self.present(alertController, animated: true, completion: nil)
}
答案 0 :(得分:0)
你必须为每个数组object.link添加布尔检查
对于目标C:
@[
@{
@"Name":@"abc",
@"Status":[NSNumber numberWithBool:YES]
}
]
对于Swift:
[
[
"Name": "abc",
"Status": true
]
]
答案 1 :(得分:0)
如果您在课程checked
上有属性Item
,则可以尝试:
let itemsChecked = sortedItems.filter {
$0.checked == true
}
答案 2 :(得分:0)
您必须为每个数组对象添加布尔检查,例如myModel。
[
"Name": "abc",
"Status": true
当选中一行时,
myModel.Status = myModel.Status ? false : true
myModel的默认状态= false
然后"你可以在数组" 中调用与每个NSObject相关联的bool答案 3 :(得分:0)
您的代码要么没有对arrayOfItemsSelected做任何事情,要么您没有向我们展示相关部分。实际上,代码示例既不会获取也不会处理所选项目。
您可以实现didSelectRowAt和didDeselectRowAt函数来维护Item类中的内部标志,也可以从indexPathsForSelectedRows中获取选择。
如果你想完全绕过UITableView的选择机制,你需要使用UIItemViewCell本身的动作处理单元格点击/点击(但这看起来过于复杂)。
顺便说一句,我怀疑你是否可以依赖cell.is从你刚出列的单元格中选择。此外,在didSet闭包中求助和重新加载tableview可能会让您遇到麻烦,导致性能问题,随机崩溃或无限循环。