2

UI に複数のボタンがあり、さまざまなタイプのクリックに応じてさまざまな機能を実行したいのですが、

  • シングルクリック
  • ダブルクリック
  • 長押し

4 つのボタンすべてが接続された IBAction を 1 回タップするのは簡単でしたが、他のタイプのクリックでは行き詰まりました。

タップ ジェスチャ認識エンジンを使用する必要があることは理解していますが、複数の UIButton に設定することはできません。

これが私がやりたいことの例です

import UIKit

class ViewController: UIViewController {


@IBOutlet weak var Label: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


func ButtonSingleTap(sender:UIButton!) {

    let ButtonNumber: String = String(sender.tag)
    Label.text = "Button " + ButtonNumber + " is Single Tapped"
}


func ButtonDoubleTap(sender:UIButton!) {

    let ButtonNumber: String = String(sender.tag)
    Label.text = "Button " + ButtonNumber + " is Double Tapped"
}


func ButtonLongTap(sender:UIButton!) {

    let ButtonNumber: String = String(sender.tag)
    Label.text = "Button " + ButtonNumber + " is Long Pressed"
}
}

UI インターフェース

4

1 に答える 1

6

UIGestureRecognizer複数のボタンに対して の1 つのインスタンスを使用することはできません。各ボタンには、独自のジェスチャ認識機能のセットが必要です。

これを行う方法を示す例を次に示します。

for button in [button1, button2, button3, button4] {
    let longPressRecognizer = UILongPressGestureRecognizer(target: self, action: Selector("didLongPress:"))
    let doubleTapRecognizer = UITapGestureRecognizer(target: self, action: Selector("didDoubleTap:"))
    doubleTapRecognizer.numberOfTapsRequired = 2
    button.addGestureRecognizer(longPressRecognizer)
    button.addGestureRecognizer(doubleTapRecognizer)
}

func didLongPress(recognizer: UILongPressGestureRecognizer) {
    guard let button = recognizer.view as? UIButton else { return }
    switch recognizer.state {
    case .Began:
        print("long press began button \(button.tag)")
    case .Ended:
        print("long press ended button \(button.tag)")
    default:
        break
    }
}

func didDoubleTap(recognizer: UITapGestureRecognizer) {
    guard let button = recognizer.view as? UIButton else { return }
    print("double tap button \(button.tag)")
}

これを機能させるには、ボタン ( button1button2button3button4) のアウトレットを追加する必要があります。

于 2015-10-28T17:57:27.690 に答える