gpt4 book ai didi

ios - 在 Swift 中制作一个 UI 元素 "conditionally tappable"

转载 作者:行者123 更新时间:2023-11-28 06:58:37 25 4
gpt4 key购买 nike

您可能会问自己“有条件地可点击”是什么意思:

我有一个 UITableView,里面有一些生成的单元格。细胞上有一些图像和标签。无论我在哪里点击单元格区域(在单元格本身、图像或标签上),它都会带我到 CellDetailViewController - ref. image .

现在,在导航栏中我想要一个“过滤器”按钮,当点击(或者更确切地说触发 - 点击打开,点击关闭)时,使这些单元格上的 UI 元素点击时执行特定于元素的操作,而不是像通常那样转到 ViewController。我计划采取一个操作,根据元素显示的内容来获取元素并过滤表格以仅显示包含特定数据的单元格 - 这意味着我需要确切地知道在哪个单元格中点击了哪个元素(最好的情况它是否在参数中作为发送者传递,以便我可以访问它的属性)。

我最初想到的是我可以让 UI 元素始终调用操作,这将检查过滤器按钮是否被点击,然后继续到 ViewController(如果没有),或者执行过滤器操作(如果它是)。这种方法的问题是它看起来真的很笨重而且很慢,如果有更好的解决方案,我真的不想重新发明轮子。

那么,问题是 - 是否有另一种方法可以做到这一点?使 UI 元素可按需点击?

E:添加了有关该问题的更多信息。

最佳答案

我建议你使用 UIGestureRecognizer 来实现你想要的,因为 UIImageViewUILabel 默认不响应用户的触摸事件.

这里有一些你可能想看的代码(这是一个工作示例)

protocol TableViewCellDelegate: class {
func labelTouchedInCell(cell: TableViewCell)
func imagedTouchedInCell(cell: TableViewCell)
}

class TableViewCell: UITableViewCell {
// You can drag & drop a label and an imageView to the prototype cell and create these IBOutlets
@IBOutlet weak var label: UILabel! {
didSet {
label.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "_labelTouched"))
label.userInteractionEnabled = true
}
}
@IBOutlet weak var cardImage: UIImageView! {
didSet {
cardImage.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "_imageTouched"))
cardImage.userInteractionEnabled = true
}
}

var delegate: TableViewCellDelegate?

func _labelTouched() {
delegate?.labelTouchedInCell(self)
}

func _imageTouched() {
delegate?.imagedTouchedInCell(self)
}
}

class TableViewController: UITableViewController {

override func viewDidLoad() {
super.viewDidLoad()
tableView.rowHeight = 80
}

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TableViewCell
cell.delegate = self
return cell
}
}

extension TableViewController: TableViewCellDelegate {
func labelTouchedInCell(cell: TableViewCell) {
let indexPath = tableView.indexPathForCell(cell)!
print("Touched label in cell at row \(indexPath.row)")
}

func imagedTouchedInCell(cell: TableViewCell) {
let indexPath = tableView.indexPathForCell(cell)!
print("Touched image in cell at row \(indexPath.row)")
}
}

如果你只想在满足某些条件时处理点击,那么在委托(delegate)方法中检查它

关于ios - 在 Swift 中制作一个 UI 元素 "conditionally tappable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32655895/

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