使用按钮创建/追加数组

时间:2017-05-15 08:48:24

标签: ios arrays swift uitableview swift3

编辑2:我以为我拥有它,但我没有。我需要在按下按钮时创建数组,但我无法弄清楚如何访问每个对象的.checkmark。我已经将“.selected”作为一个属性,但也无法访问它。

我有一个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)
}

4 个答案:

答案 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可能会让您遇到麻烦,导致性能问题,随机崩溃或无限循环。