我正在使用最新的Swift 3 Beta(Xcode版本8.0 beta 6(8S201h))。
我已经读过您需要最后三个功能来实现滑动行为,并且正常工作,因为我可以在所有行上滑动。
我的表的基本行为是我在显示结果的一到八行(numberOfRowsInSection)之间显示。用户可以点按任意一行,并且会在录制的单元格下方插入一个“扩展的' /详细信息”行(didSelectRowAt)。
当用户滑动'扩展'在行中,有两个显示的按钮(editActionsForRowAtIndexPath)。
用户仍然可以刷任何其他行,这是我试图用(canEditRowAt indexPath)中的逻辑消除的。
我已经测试过返回false和true,但操作仍然有效。我还包括了打印行,以查看是否正在调用func并且它永远不会显示在日志中。
思想?
import UIKit
class vcAwards: UIViewController, UITableViewDelegate {
... lots of other working code ...
/************************/
/** List Award Winners **/
/************************/
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return award.count
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// TBD add isExpanded to Award Class????
let tappedRow = indexPath.row
let nextRow = indexPath.row + 1
if expandedRowIs == -1 {
award.insert("Expanded", at: nextRow)
expandedRowIs = tappedRow
} else if tappedRow == expandedRowIs || tappedRow == expandedRowIs + 1 {
award.remove(at: expandedRowIs + 1)
expandedRowIs = -1
} else {
award.remove(at: expandedRowIs + 1)
if tappedRow > expandedRowIs {
award.insert("Expanded", at: tappedRow)
expandedRowIs = tappedRow - 1
} else {
award.insert("Expanded", at: nextRow)
expandedRowIs = tappedRow
}
}
tableView.reloadData()
}
func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell { ... }
///
/// Next three functions provide for the Swipe left functionality
///
func tableView(_ tableView: UITableView, editActionsForRowAtIndexPath indexPath: IndexPath) -> [AnyObject]? {
if award[indexPath.row] != "Expanded" {
return nil
} else {
let myDog = UITableViewRowAction(style: .normal, title: "My Dog") { action, index in
print("'My Dog' swipped and clicked")
}
myDog.backgroundColor = UIColor.orange
let share = UITableViewRowAction(style: .normal, title: "Share") { action, index in
print("'Share' swipped and clicked")
}
share.backgroundColor = UIColor.blue
return [share, myDog]
}
}
func tableView(_ tableView: UITableView, canEditRowAtIndexPath indexPath: IndexPath) -> Bool {
// ---> This print never shows up in the log
print ("*** Want to only swipe on Expanded rows: \(award[indexPath.row])")
// ---> What I want to use as the final logic
// return award[indexPath.row] == "Expanded"
// ---> Using either of the following allow the swipes to happen
//return true
return false
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
}
}
}
答案 0 :(得分:0)
只需返回nil
中的editActionsForRowAtIndexPath
和false
中的canEditRowAtIndexPath
,即可获取您不想应用操作的行。
答案 1 :(得分:0)
原始代码中有两个问题。我没有为我不想要自定义操作的单元格返回nil,而且我没有正确的选项名称。
在初始代码示例中进行了更正:
func tableView(_ tableView: UITableView, canEditRowAtIndexPath indexPath: IndexPath) -> Bool {
不正确:
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {