菜鸟教程小白 发表于 2022-12-12 15:05:41

ios - 在条件和 UI 澄清的情况下删除 tableView 行


                                            <p><p>我需要一种允许用户删除 tableView 行的方法,前提是满足条件(如果 source == "MyApp")。我在下面提供了一个有效的示例。 </p>

<pre><code>func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -&gt; Bool {
    return true
}

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    let source = objectSample.source.name

    if source == &#34;MyApp&#34;{
      if (editingStyle == UITableViewCellEditingStyle.Delete) {
            let UUIDtoDelete = objectSample.UUID
            deleteUUIDobject(UUIDtoDelete)
            objectSample.removeAtIndex(indexPath.row)
            tableView.deleteRowsAtIndexPaths(, withRowAnimation: UITableViewRowAnimation.Automatic)

            println(&#34;Deleted&#34;)
      }
    }
    else {
      println(&#34;Not allowed to delete&#34;)
    }
}
</code></pre>

<p>生成的 UI 对用户来说有点困惑,因为无论他/她是否可以实际删除该行,它都会为所有行留下一个红色的滑动删除按钮。因此,如果不满足条件,我尝试将删除按钮设为灰色:</p>

<pre><code>func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -&gt; ? {
    let source = objectSample.source.name
    println(source)

    if source == &#34;MyApp&#34;{
      var deleteButtonRed = UITableViewRowAction(style: .Default, title: &#34;Delete&#34;, handler: { (action, indexPath) in
            println(&#34;To delete is OK, set color red&#34;)
      })
      deleteButtonRed.backgroundColor = UIColor.redColor()
      return
    }

    else{
      var deleteButtonGray = UITableViewRowAction(style: .Default, title: &#34;Delete&#34;, handler: { (action, indexPath) in
            println(&#34;To delete is NOT OK, ret color gray&#34;)
      })
      deleteButtonGray.backgroundColor = UIColor.grayColor()
      return

      }

    return [&#34;Will Never Happen&#34;]
}
</code></pre>

<p>我的问题是这些方法不能一起使用。出于某种原因,如果我应用方法 editActionsForRowAtIndexPath,则永远不会评估 commitEditingStyle。即使 source == "MyApp"也不会删除该行。如何将两者结合在一起?<br/>
或者有没有更好的方法来显示用户可以/不能删除哪些 tableView 条目?</p>

<p>任何帮助将不胜感激!谢谢。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>试试这个以防止其他单元格编辑:</p>

<pre><code>func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -&gt; Bool {
    return source == &#34;MyApp&#34;
}
</code></pre>

<p>或者这样可以让其他单元格可编辑,但不能删除控制:</p>

<pre><code>func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -&gt; UITableViewCellEditingStyle {
    if source == &#34;MyApp&#34; {
      return UITableViewCellEditingStyle.Delete
    } else {
      return UITableViewCellEditingStyle.None
    }
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在条件和 UI 澄清的情况下删除 tableView 行,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/29708861/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/29708861/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在条件和 UI 澄清的情况下删除 tableView 行