长按后Swift UiTableViewCell重置

Posted

技术标签:

【中文标题】长按后Swift UiTableViewCell重置【英文标题】:Swift UiTableViewCell Resets after long press 【发布时间】:2017-03-08 02:09:03 【问题描述】:

在我的主视图控制器中,我有一个按钮,它会弹出一个带有两个按钮和一个 tableView 的对话框。 tableView 正在使用自定义 UIView 显示,并且 UITableViewCell 也是自定义的。 UITableViewCell 由一个自定义复选框和一个 UILabel 组成。我正在尝试向 tableView 添加一个点击手势,以便当我单击一行时它会标记该复选框。这个功能有点用,但是当我按下超过 3 秒时,UITableViewCell 会重置为这个

UITableViewCell Error ScreenShot

我不知道是什么导致了这个错误。任何帮助将不胜感激。

这是我在 ViewController 中打开弹出对话框的代码:

func locationButtonPressed(sender: UIBarButtonItem) 
    // Create a custom view controller
    let vc = RadiusViewController(nibName: "RadiusViewController", bundle: nil)
    // Create the dialog
    let popup = PopupDialog(viewController: vc, buttonAlignment: .horizontal, transitionStyle: .bounceDown, gestureDismissal: true)

    // create first button
    let cancelButton = CancelButton(title: "Cancel", height: 60, dismissOnTap: true) 
        print("Popup Canceled")
    

    // create second button
    let okButton = DefaultButton(title: "Ok", height: 60, dismissOnTap: true) 
        print("Ok button pressed")
    

    // add buttons to dialog
    popup.addButtons([cancelButton, okButton])

    // present dialog
    self.present(popup, animated: true, completion: nil)

    print("location button pressed")

使用 tableView 在我的自定义 UIView 中点击手势功能:

override func viewDidLoad() 
    super.viewDidLoad()

    ...code

    let tap = UITapGestureRecognizer(target: self, action: #selector(tableTapped))
    self.tableView.addGestureRecognizer(tap)


func tableTapped(tap:UITapGestureRecognizer) 
    let location = tap.location(in: self.tableView)
    let path = self.tableView.indexPathForRow(at: location)
    if let indexPathForRow = path 
        self.tableView(self.tableView, didSelectRowAt: indexPathForRow)
        print("Tapped on the table")
     else 
        // handle tap on empty space below existing rows however you want
    

【问题讨论】:

【参考方案1】:

我认为您可能需要在 tableviewcell 上添加点击手势,而不是 tableview。

【讨论】:

我该怎么做呢?【参考方案2】:

您只需要让您的 ViewController 实现 UITableViewDelegate。 didSelectRowAtIndexPath 有一个回调方法,您可以在其中设置逻辑以访问单元格的属性,例如自定义复选框。不需要点击手势识别器,因为这是本机提供的功能。

UITableViewDelegate Documentation

【讨论】:

以上是关于长按后Swift UiTableViewCell重置的主要内容,如果未能解决你的问题,请参考以下文章

长按时像 iMessage 一样突出显示 UITableViewCell

IOS Swift WkWebview如何屏蔽长按

长按后 EditText 不显示默认的 ContextMenu

长按后如何跟踪按钮选择?

长按后如何禁用 UICollectionViewCell 上的 UILongPressGestureRecognizer?

长按后抬起手指时iOS中没有Javascript事件?