ios - DidSelectRow 方法由于 tapGestureRecognizer 而被禁用

标签 ios swift uitableview swift3

我正在 swift 3.0 中开发一个项目,我有 UIViewController 来填充一些文本字段。因此,我使用 TableView 作为下拉菜单,一旦选择一行,它将被分配给 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
  }

最佳答案

你是对的,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)
    }

关于ios - DidSelectRow 方法由于 tapGestureRecognizer 而被禁用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40355806/

相关文章:

SwiftUI : ViewModifier where content is a Shape

ios - 如何修复 'data of UITableViewCell exchange'?

iOS swift : Static Cell

ios - Xcode 9 - iOS 11 设备日志私有(private)

java - 我需要创建一个可以在所有智能手机上运行的智能手机应用程序,我该怎么做?

ios - prepareForSegue **总是** 创建一个新的 destinationViewController?

swift - 删除单元格时无法访问 textLabel 值

ios - 如何在 Swift 开始时禁用按钮触摸

ios - Objective-C NSMutableArray 只返回一项

ios - Swift:如何返回类<UITableViewDataSource>?