【问题标题】:How to store an Array of selected rows?如何存储选定行的数组?
【发布时间】:2015-08-25 19:10:09
【问题描述】:

在我的代码中,我有一个表格视图,可以加载使用我的应用程序的用户名。当用户选择一行时,它将出现一个复选标记。我想要做的是保存一个包含所有选定行的数组(该数组将包含名称)。找了一些资料,但是我还在学iOS编程,不懂Obj-c。

这是我到目前为止所做的:

var selectedMembers = [String]?
 func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.names?.count ?? 0
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("UserCell") as! UITableViewCell

        cell.textLabel!.text = names![indexPath.row]

        return cell
    }


func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
    selectedMembers = Array()
    if let cell = tableView.cellForRowAtIndexPath(indexPath) {

        if cell.accessoryType == .Checkmark
        {
            cell.accessoryType = .None

            self.selectedMembers?.remove(indexPath)

        }
        else
    {
        cell.accessoryType = .Checkmark
        self.selectedMembers?.append(indexPath)
        }
    }
}

【问题讨论】:

标签: ios arrays swift uitableview


【解决方案1】:

要获取名称,您需要使用选定的行并将该行的条目与名称一起放入您的数组中。

要获取indexpath 的行,您可以使用

indexPath.row

要获取您将使用的会员姓名

names![indexPath.row-1]

当然,您可以使用

将其保存到您的数组中
self.selectedMembers?.append(names![indexPath.row-1])

要删除项目,您需要添加一个额外的步骤

self.selectedMembers?.removeAtIndex(selectedMembers.indexOf(names![indexPath.row-1]))

【讨论】:

  • 使用此解决方案我收到消息:“致命错误:数组索引超出范围。”我删除了“-1”,我的数组中只有最后一个选定成员的名称。
  • 能否请您具体说明返回错误的是哪一行?
  • 这一行:self.selectedMembers?.append(names![indexPath.row-1])。当我选择行时应用程序崩溃。
  • 在您的界面构建器中,您是否启用了选择多行的可能性(您是否看到多个复选标记)
  • 是的,校验码出现在所有选定的用户中。
【解决方案2】:

您可以像这样使用 didSelectRowAtIndexPath 和 didDeselectRowAtIndexPath 委托方法来跟踪表中的索引路径。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    selectedIndexPaths.append(indexPath)

}

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {

    if let index = find(selectedIndexPaths, indexPath) {
        selectedIndexPaths.removeAtIndex(index)
    }

}

然后就可以使用索引路径回溯并获取选中的对象了。

【讨论】:

  • 它给了我这样的信息:“不能使用类型为'(NSIndexPath)'的参数列表调用'append'。”在 selectedMembers.append(indexPath)
  • 确保你像这样初始化它var selectedIndexPaths = [NSIndexPath]()
  • 嘿,找到了什么(selectedIndexPaths,indexPath)? m 使用未解析标识符“find”时出错。
猜你喜欢
  • 2021-08-30
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
  • 2019-10-07
  • 1970-01-01
  • 2013-04-25
相关资源
最近更新 更多