由于tapGestureRecognizer,DidSelectRow方法被禁用 [英] DidSelectRow method being disabled due to tapGestureRecognizer

查看:62
本文介绍了由于tapGestureRecognizer,DidSelectRow方法被禁用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Im working on a project in swift 3.0 and I have UIViewController as to fill up few text fields. Thus, I have used a table view as a drop down menu, where once a row is been selected it'll get assigned to a UILabel. In addition I have added a UITapGuestureRecognizer method to make sure the keypad hides once the screen is been tapped. Unfortunately because of this method my didSelectRow is not working,in fact once a row is been tapped the name won't get assigned to the UILable. But when I eliminate the UITapGusture method it works fine. How can I solve this issue ? The code as bellow.

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
  }


推荐答案

你是对的,由于tapGestureRecognizer,DidSelectRow方法将被禁用。
你可以尝试执行'view.endEditing( ()'在'touchsbegin'中,记得重写超级功能。当UITableview存在时,不要使用tapGestureRecognizer。

You are right,DidSelectRow method will be disabled due to tapGestureRecognizer。 you can try execute 'view.endEditing(true)'in 'touchsbegin',remember to rewrite super func.Don't use tapGestureRecognizer when UITableview exists.

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

这篇关于由于tapGestureRecognizer,DidSelectRow方法被禁用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆