注意:我的手势识别器没有什么不同,并且在不同的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
按钮中,但没有用。
答案 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>