gpt4 book ai didi

ios - 尝试仅允许在单个特定行上进行滑动行为

转载 作者:行者123 更新时间:2023-11-30 13:08:23 25 4
gpt4 key购买 nike

我正在使用最新的 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) {
}
}
}

最佳答案

对于您不想应用的行,只需在 editActionsForRowAtIndexPath 中返回 nil 并在 canEditRowAtIndexPath 中返回 false行动。

关于ios - 尝试仅允许在单个特定行上进行滑动行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39068080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com