SWIFT4:如何让两个点击手势一起工作

时间:2019-04-02 11:03:33

标签: ios swift uiview uitapgesturerecognizer

注意:我的手势识别器没有什么不同,并且在不同的viewController中。

  

TLDR:如何使我的两个轻击手势识别器都可以工作?

我已经从某些容器视图中创建了一个side menu,并在其中添加了一个手势识别器,该手势识别器使我可以在点击时将其关闭。然后我创建了另一个ViewController,其中有一些文本字段。由于我希望在点击时关闭键盘,所以我甚至添加了一个手势识别器,该功能可让我在每次点击视图时隐藏键盘。现在我注意到隐藏键盘的手势不会让我的侧边菜单在点击时隐藏:

侧面菜单视图控制器

  @IBOutlet weak var bigContainer: UIView!
  @IBOutlet weak var sideMenuConstraint: NSLayoutConstraint!

    var sideMenuOpen = false
    var gesture : UITapGestureRecognizer?


    override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self,
                                               selector: #selector(toggleSideMenu), name: NSNotification.Name("ToggleSideMenu"), object: nil)


       gesture = UITapGestureRecognizer(target: self, action: #selector(ContainerViewController.toggleSideMenu))


    }


    @objc func toggleSideMenu() {
        if sideMenuOpen {
            sideMenuOpen = false
            sideMenuConstraint.constant = -240
        self.bigContainer.removeGestureRecognizer(gesture!)
        } else {
            sideMenuOpen = true
           sideMenuConstraint.constant = 0
         self.bigContainer.addGestureRecognizer(gesture!)

        }
    }

主视图视图控制器

@IBOutlet weak var textField: UITextField!
 @IBOutlet weak var menuOutlet: UIButton!
 override func viewDidLoad() {
        super.viewDidLoad()
  let endEditingTapGesture = UITapGestureRecognizer(target: view, action: #selector(UIView.endEditing(_:)))
        endEditingTapGesture.cancelsTouchesInView = false
        view.addGestureRecognizer(endEditingTapGesture)
}
 @IBAction func toggleSideMenu(_ sender: Any) {
        print("Toggle side menu")
        NotificationCenter.default.post(name: NSNotification.Name("ToggleSideMenu"), object: nil)

    }
}

我尝试取消点击手势以将键盘隐藏在toggleSideMenu按钮中,但没有用。

1 个答案:

答案 0 :(得分:1)

在您的主视图控制器中,替换为以下代码:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/footer"
        android:layout_below="@+id/header"
        android:isScrollContainer="false">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="30dp"
            android:layout_marginRight="30dp"
            android:orientation="vertical">

      <....Widgets>

     </LinearLayout>
     </scrollview>

     <com.mypackage.activities.Footer
        android:id="@+id/footer"
        android:layout_width="match_parent"
        android:layout_height="@dimen/footerHeight"
        android:layout_alignParentBottom="true"
        />

</RelativeLayout>