Geo*_*rge 142 iphone uigesturerecognizer ios swift ios8
我有一个UIView,并且我已添加了点击手势:
let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
tap.delegate = self
myView.addGesture(tap)
Run Code Online (Sandbox Code Playgroud)
我试图在testfile中以编程方式调用它.
sendActionForEvent
Run Code Online (Sandbox Code Playgroud)
我正在使用此功能,但它无法正常工作:
myView.sendActionForEvent(UIEvents.touchUpDown)
Run Code Online (Sandbox Code Playgroud)
它显示发送到实例的无法识别的选择器.
我怎么解决这个问题?
提前致谢
Sal*_*nov 195
您需要UITapGestureRecognizer使用目标和操作进行初始化,如下所示:
let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
myView.addGestureRecognizer(tap)
Run Code Online (Sandbox Code Playgroud)
然后,您应该实现处理程序,每次发生tap事件时都会调用该处理程序:
@objc func handleTap(_ sender: UITapGestureRecognizer? = nil) {
// handling code
}
Run Code Online (Sandbox Code Playgroud)
因此,现在调用您的tap手势识别器事件处理程序就像调用方法一样简单:
handleTap()
Run Code Online (Sandbox Code Playgroud)
Joh*_*Lim 89
对于任何正在寻找Swift 3解决方案的人
let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
view.addGestureRecognizer(tap)
view.isUserInteractionEnabled = true
self.view.addSubview(view)
// function which is triggered when handleTap is called
func handleTap(_ sender: UITapGestureRecognizer) {
print("Hello World")
}
Run Code Online (Sandbox Code Playgroud)
RNH*_*TTR 57
对于Swift 4:
let tap = UITapGestureRecognizer(target: self, action: #selector(self.handleTap(_:)))
view.addGestureRecognizer(tap)
view.isUserInteractionEnabled = true
self.view.addSubview(view)
// function which is triggered when handleTap is called
@objc func handleTap(_ sender: UITapGestureRecognizer) {
print("Hello World")
}
Run Code Online (Sandbox Code Playgroud)
在Swift 4中,你需要明确指出触发函数可以从Objective-C调用,所以你需要添加@objc你的handleTap函数.
请参阅@Ali Beadle的回答:Swift 4添加手势:覆盖vs @objc
小智 50
只需注意 - 不要忘记在视图上启用交互:
let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
view.addGestureRecognizer(tap)
// view.userInteractionEnabled = true
self.view.addSubview(view)
Run Code Online (Sandbox Code Playgroud)
Kir*_*odi 19
步骤1
@IBOutlet var viewTap: UIView!
Run Code Online (Sandbox Code Playgroud)
第2步
var tapGesture = UITapGestureRecognizer()
Run Code Online (Sandbox Code Playgroud)
STEP:3
override func viewDidLoad() {
super.viewDidLoad()
// TAP Gesture
tapGesture = UITapGestureRecognizer(target: self, action: #selector(ViewController.myviewTapped(_:)))
tapGesture.numberOfTapsRequired = 1
tapGesture.numberOfTouchesRequired = 1
viewTap.addGestureRecognizer(tapGesture)
viewTap.isUserInteractionEnabled = true
}
Run Code Online (Sandbox Code Playgroud)
第4步
func myviewTapped(_ sender: UITapGestureRecognizer) {
if self.viewTap.backgroundColor == UIColor.yellow {
self.viewTap.backgroundColor = UIColor.green
}else{
self.viewTap.backgroundColor = UIColor.yellow
}
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT
ikb*_*bal 15
Swift 5.1 三视图示例
步骤:1 -> 添加故事板视图并添加插座 viewController UIView
@IBOutlet var firstView: UIView!
@IBOutlet var secondView: UIView!
@IBOutlet var thirdView: UIView!
Run Code Online (Sandbox Code Playgroud)
步骤:2 -> 添加 storyBoard 视图标签
步骤:3 -> 添加手势
override func viewDidLoad() {
super.viewDidLoad()
firstView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tap(_:))))
firstView.isUserInteractionEnabled = true
secondView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tap(_:))))
secondView.isUserInteractionEnabled = true
thirdView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tap(_:))))
thirdView.isUserInteractionEnabled = true
}
Run Code Online (Sandbox Code Playgroud)
步骤:4 -> 选择视图
@objc func tap(_ gestureRecognizer: UITapGestureRecognizer) {
let tag = gestureRecognizer.view?.tag
switch tag! {
case 1 :
print("select first view")
case 2 :
print("select second view")
case 3 :
print("select third view")
default:
print("default")
}
}
Run Code Online (Sandbox Code Playgroud)
Mus*_*ari 14
实现轻击手势
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "touchHappen")
view.userInteractionEnabled = true
view.addGestureRecognizer(tap)
Run Code Online (Sandbox Code Playgroud)
识别出水龙头时调用此功能.
func touchHappen() {
//Causes the view (or one of its embedded text fields) to resign the first responder status.
self.view.endEditing(true)
}
Run Code Online (Sandbox Code Playgroud)
For Swift 3的更新
let tap = UITapGestureRecognizer(target: self, action: #selector(self.touchHappen(_:)))
view.addGestureRecognizer(tap)
view.userInteractionEnabled = true
func touchHappen(_ sender: UITapGestureRecognizer) {
print("Hello Museer")
}
Run Code Online (Sandbox Code Playgroud)
Gia*_*ang 10
斯威夫特4
let tap = UITapGestureRecognizer(target: self, action: #selector(self.touchTapped(_:)))
self.view.addGestureRecognizer(tap)
@objc func touchTapped(_ sender: UITapGestureRecognizer) {
}
Run Code Online (Sandbox Code Playgroud)
小智 9
尝试以下扩展
extension UIView {
func addTapGesture(action : @escaping ()->Void ){
let tap = MyTapGestureRecognizer(target: self , action: #selector(self.handleTap(_:)))
tap.action = action
tap.numberOfTapsRequired = 1
self.addGestureRecognizer(tap)
self.isUserInteractionEnabled = true
}
@objc func handleTap(_ sender: MyTapGestureRecognizer) {
sender.action!()
}
}
class MyTapGestureRecognizer: UITapGestureRecognizer {
var action : (()->Void)? = nil
}
Run Code Online (Sandbox Code Playgroud)
然后使用它:
submitBtn.addTapGesture {
//your code
}
Run Code Online (Sandbox Code Playgroud)
您甚至可以将它用于手机
cell.addTapGesture {
//your code
}
Run Code Online (Sandbox Code Playgroud)
小智 7
这是它在Swift 3中的工作原理:
@IBOutlet var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action:#selector(handleTap))
myView.addGestureRecognizer(tap)
}
func handleTap() {
print("tapped")
}
Run Code Online (Sandbox Code Playgroud)
这是在Swift 5中在视图上添加手势的最简单方法
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
addGestures()
}
// MARK: Add Gestures to target view
func addGestures()
{
// 1. Single Tap or Touch
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapGetstureDetected))
tapGesture.numberOfTapsRequired = 1
view.addGestureRecognizer(tapGesture)
//2. Double Tap
let doubleTapGesture = UITapGestureRecognizer(target: self, action: #selector(self.doubleTapGestureDetected))
doubleTapGesture.numberOfTapsRequired = 2
view.addGestureRecognizer(doubleTapGesture)
//3. Swipe
let swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeGetstureDetected))
view.addGestureRecognizer(swipeGesture)
//4. Pinch
let pinchGesture = UIPinchGestureRecognizer(target: self, action: #selector(self.pinchGetstureDetected))
view.addGestureRecognizer(pinchGesture)
//5. Long Press
let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(self.longPressGetstureDetected))
view.addGestureRecognizer(longPressGesture)
//6. Pan
let panGesture = UILongPressGestureRecognizer(target: self, action: #selector(self.panGestureDetected))
view.addGestureRecognizer(panGesture)
}
// MARK: Handle Gesture detection
@objc func swipeGetstureDetected() {
print("Swipe Gesture detected!!")
}
@objc func tapGetstureDetected() {
print("Touch/Tap Gesture detected!!")
}
@objc func pinchGetstureDetected() {
print("Pinch Gesture detected!!")
}
@objc func longPressGetstureDetected() {
print("Long Press Gesture detected!!")
}
@objc func doubleTapGestureDetected() {
print("Double Tap Gesture detected!!")
}
@objc func panGestureDetected()
{
print("Pan Gesture detected!!")
}
//MARK: Shake Gesture
override func becomeFirstResponder() -> Bool {
return true
}
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?){
if motion == .motionShake
{
print("Shake Gesture Detected")
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在swift上研究了Xcode 6.4.见下文.
var view1: UIView!
func assignTapToView1() {
let tap = UITapGestureRecognizer(target: self, action: Selector("handleTap"))
// tap.delegate = self
view1.addGestureRecognizer(tap)
self.view .addSubview(view1)
...
}
func handleTap() {
print("tap working")
view1.removeFromSuperview()
// view1.alpha = 0.1
}
Run Code Online (Sandbox Code Playgroud)
小智 6
Swift 4的完整答案
步骤1:为视图创建出口
@IBOutlet weak var rightViewOutlet: UIView!
Run Code Online (Sandbox Code Playgroud)
步骤2:定义轻击手势
var tapGesture = UITapGestureRecognizer()
Run Code Online (Sandbox Code Playgroud)
步骤3:创建ObjC函数(在点击视图时调用)
@objc func rightViewTapped(_ recognizer: UIGestureRecognizer) {
print("Right button is tapped")
}
Run Code Online (Sandbox Code Playgroud)
步骤4:在viewDidLoad()中添加以下内容
let rightTap = UITapGestureRecognizer(target: self, action: #selector(ViewController.rightViewTapped(_:)))
rightViewOutlet.addGestureRecognizer(rightTap)
Run Code Online (Sandbox Code Playgroud)
小智 5
您需要使用目标和操作初始化UITapGestureRecognizer,如下所示:
let tap = UITapGestureRecognizer(target: self, action: "handleTap:")
tap.delegate = self
myView.addGestureRecognizer(tap)
Run Code Online (Sandbox Code Playgroud)
然后,您应该实现处理程序,每次发生tap事件时都会调用该处理程序:
func handleTap(sender: UITapGestureRecognizer) {
// handling code
}
Run Code Online (Sandbox Code Playgroud)
如果要在下面给出目标C代码,
UITapGestureRecognizer *gesRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)]; // Declare the Gesture.
gesRecognizer.delegate = self;
[yourView addGestureRecognizer:gesRecognizer]; // Add Gesture to your view.
// Declare the Gesture Recognizer handler method.
- (void)handleTap:(UITapGestureRecognizer *)gestureRecognizer{
NSLog(@"Tapped");
}
Run Code Online (Sandbox Code Playgroud)
或者您想在下面给出快速代码,
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Add tap gesture recognizer to view
let tapGesture = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
myView.addGestureRecognizer(tapGesture)
}
// this method is called when a tap is recognized
func handleTap(sender: UITapGestureRecognizer) {
print("tap")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
232344 次 |
| 最近记录: |