【问题标题】:DidSelectRow method being disabled due to tapGestureRecognizer由于 tapGestureRecognizer,DidSelectRow 方法被禁用
【发布时间】:2016-11-01 07:31:46
【问题描述】:

我正在 swift 3.0 中开发一个项目,并且我有 UIViewController 来填充几个文本字段。因此,我使用表格视图作为下拉菜单,一旦选择了一行,它将被分配给 UILabel。此外,我添加了一个 UITapGuestureRecognizer 方法,以确保在点击屏幕后键盘隐藏。不幸的是,由于这种方法,我的 didSelectRow 不起作用,事实上,一旦点击了一行,名称就不会分配给 UILable。但是当我消除 UITapGusture 方法时,它工作正常。我该如何解决这个问题?代码如下。

import UIKit
import CoreData

class AddRecurringExpensesViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var selectCategoryLabel: UILabel!

@IBOutlet weak var expenseNameTextField: UITextField!
@IBOutlet weak var amountTextField: UITextField!
@IBOutlet weak var toTextField: UITextField!
@IBOutlet weak var fromTextField: UITextField!

@IBOutlet weak var recurringexpenseTypeTableView: UITableView!

@IBOutlet weak var fromDatePicker: UIDatePicker!
@IBOutlet weak var fromDatePickerView: UIView!

@IBOutlet weak var toDatePickerView: UIView!
@IBOutlet weak var toDatePicker: UIDatePicker!





 var selectCategoryArray = ["Entertainment", "Food", "Membership", "Misc", "Purchase", "Subscription", "Transport", "Utility", "Other"]


 override func viewDidLoad() {
    super.viewDidLoad()
    self.fromDatePickerView.isHidden = true
    self.toDatePickerView.isHidden = true
    self.recurringexpenseTypeTableView.isHidden = true

    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(AddRecurringExpensesViewController.dismissKeyboard))
    view.addGestureRecognizer(tap)

  }
 func dismissKeyboard() {
    //Causes the view (or one of its embedded text fields) to resign the first responder status.
    view.endEditing(true)
  }
  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return selectCategoryArray.count
  }

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell ()

    cell.textLabel?.text = selectCategoryArray[indexPath.row]
    return cell
  }


  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {


    self.selectCategoryLabel.text = selectCategoryArray[indexPath.row]

    print("selected row is \(selectCategoryLabel.text)")


    self.recurringexpenseTypeTableView.isHidden = true
  }
  @IBAction func selectCategoryButtonPressed(_ sender: AnyObject) {
     self.recurringexpenseTypeTableView.isHidden = false
  }

  @IBAction func fromDateButtonPressed(_ sender: AnyObject) {

    self.fromDatePickerView.isHidden = false
  }

  @IBAction func fromDateAddedButtonPressed(_ sender: AnyObject) {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd MMM yyyy"
    fromTextField.text = dateFormatter.string(from:fromDatePicker.date)
    self.fromDatePickerView.isHidden = true
  }

  @IBAction func toDateButtonPressed(_ sender: AnyObject) {
    self.toDatePickerView.isHidden = false
  }

  @IBAction func toDateAddedButtonPressed(_ sender: AnyObject) {
    let dateFormatter = DateFormatter ()
    dateFormatter.dateFormat = "dd MMM yyyy"
    toTextField.text = dateFormatter.string(from: toDatePicker.date)
    self.toDatePickerView.isHidden = true
  }

【问题讨论】:

标签: ios swift uitableview swift3


【解决方案1】:

你是对的,DidSelectRow 方法会因为 tapGestureRecognizer 而被禁用。 你可以尝试在'touchsbegin'中执行'view.endEditing(true)',记得重写super func。UITableview存在时不要使用tapGestureRecognizer。

 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesBegan(touches, with: event)
        view.endEditing(true)
    }

【讨论】:

    【解决方案2】:

    修改你的dismiss键盘功能如下,

    func dismissKeyboard() {
      if self.recurringexpenseTypeTableView.isHidden == true {
         view.endEditing(true)
       }
    }
    

    【讨论】:

      【解决方案3】:

      您可以将其视为相互叠加的层。 使用 UITapGuestureRecognizer,您添加了一个新层。当用户在屏幕上按下时,调用顶层(UITapGuestureRecognizer)。它下面的图层不会被调用。

      对于这种情况,我建议您删除 UITapGuestureRecognizer 层。并在 DidSelectRow 中添加键盘的关闭。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-09
        • 2023-03-11
        • 1970-01-01
        • 1970-01-01
        • 2012-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多