当前位置: 首页 > 面试题库 >

问题检测按钮cellForRowAt

黄宏旷
2023-03-14
问题内容

我需要检测是否在UITableViewController中单击了按钮

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

 let LikesBtn = cell.viewWithTag(7) as! UIButton

}

问题答案:

Swift中最简单,最有效的方法是回调闭包。

  • 子类UITableViewCell,用于标识UI元素的 viewWithTag 方法已过时。
  • 将自定义单元格的类设置为子类的名称,然后ButtonCellIdentifier在Interface Builder 中将标识符设置为。

  • 添加一个callback属性。

  • 添加一个动作并将按钮连接到该动作。

    class ButtonCell: UITableViewCell {
    
    var callback : (() -> Void)?
    
    @IBAction func buttonPressed(_ sender : UIButton) {
       callback?()
    }
    

    }

  • cellForRow回调分配到自定义单元格。

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "ButtonCellIdentifier", for: indexPath) as! ButtonCell
     cell.callback = {
         print("Button pressed", indexPath)  
     }
     return cell
    

    }

  • 当按下按钮时,将调用回调。索引路径被捕获。

编辑

如果可以添加或删除细胞,则有一个警告。在这种情况下,将UITableViewCell实例作为参数传递并从那里获取索引路径

class ButtonCell: UITableViewCell {

    var callback : ((UITableViewCell) -> Void)?

    @IBAction func buttonPressed(_ sender : UIButton) {
       callback?(self)
    }
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
     let cell = tableView.dequeueReusableCell(withIdentifier: "ButtonCellIdentifier", for: indexPath) as! ButtonCell
     let item = dataSourceArray[indexPath.row]
     // do something with item
     cell.callback = { cell in
         let actualIndexPath = tableView.indexPath(for: cell)!
         print("Button pressed", actualIndexPath)  
     }
     return cell
  }

如果甚至section可以更改,那么协议/委托可能会更有效。



 类似资料:
  • 假设有几个以编程方式创建的按钮,并且有一个通用的按钮处理程序。 如何理解处理器内部哪个按钮被按下? 而不在函数调用中传递一些特殊的东西。那不行:< code > onButtonClicked(" button " I); 例如,在JavaScript中,在处理程序内部有< code>$(this),它可以立即“理解”按下了哪个按钮。 也许在颤振中也有类似的机制?我想在按钮上挂起属性(事先不知道哪

  • 问题内容: 未调用音量按钮通知功能。 码: 在viewWillAppear中被调用 无论哪种情况,代码都不会到达print语句。 我正在尝试两种不同的方法来做到这一点,但都没有用。 我已遵循以下步骤:检测iPhone的音量按钮按下了吗? 问题答案: 使用第二种方法,密钥路径的值应为。那就是我们正在观察的财产。因此将代码更改为

  • 问题内容: 我一直在为FF写我的脚本,但希望他们所做的工作很少,它们也可以在其他浏览器上运行,但是IE驱动程序似乎存在按钮问题? 我在按钮上有一个简单的webelement.click(),不会引发错误,但不单击按钮。在FF它的罚款。我可以获取文本,获取价值,所以我知道find语句是可以的,只是不会单击它。 想法或帮助会很棒 只是做 HTML-控件上有3个按钮,我现在只对登录感兴趣 问题答案: 遇

  • 我想知道在多个按钮的列表中按下了哪个按钮。例如,如果按下了第二个按钮,则代码会检测到按下第二个向下的按钮,并返回类似于 。但是,我不知道该怎么做。当我搜索时,jQuery参与其中,但我没有使用jQuery。代码如下: 我尝试使用EventListner,通过将EventListner添加到创建的每个按钮,但这并不能区分单个按钮。请注意,每个按钮都有一个id为和一个类。 如果有人能帮忙,谢谢!

  • 我有一个按钮:当我点击它时,它会发送一个ajax请求,然后,javascript代码在完成后将类“隐藏”添加到这个按钮上。 我怎么能等待ajax请求结束?发送单击命令后,我认为Selenium应该检测到按钮中何时添加了“隐藏”类,但我不知道如何检测。 你能帮我吗? 它不工作(我有一个超时):

  • 我是Android新手。我正在尝试制作一个应用程序,它将在后台运行,并检测三次快速按下电源按钮。我查阅了很多资料,但无法澄清我的困惑。谁能给我一些建议吗?蒂亚。