2016-12-27 40 views
1

我有一個簡單的UITapGestureRecognizer,並在其相應的方法中插入了一條print語句。以下是我寫的代碼:Swift UITapGestureRecognizer不能按預期工作

let tap = UITapGestureRecognizer(target: self, action: #selector(self.segmentTapped(sender:))) 
tap.numberOfTapsRequired = 1 
self.segmentedControl.addGestureRecognizer(tap) 

上述代碼在viewDidLoad方法中執行。

此外,它的目標的方法是:

func segmentTapped(sender: UITapGestureRecognizer) { 
    print("called") 
} 

與所述程序中存在的問題是,「叫」字時,纔會打印在控制檯當segmentedControl輕敲兩次。如果僅點擊一次,則不會打印出來。我很困惑,爲什麼會發生這種情況,因爲我已將手勢的numberOfTapsRequired屬性設置爲1.

+0

是什麼類型'segmentedControl'?它在名稱中具有「控制」的事實讓我覺得別的東西可能正在捕捉手勢 –

+0

這是因爲分段控件具有自己的手勢,可以處理您的分段按鈕的水龍頭。 – nferocious76

+0

Doug,我正在使用名爲KMSegmentedControl的第三方庫。到圖書館的鏈接:https://cocoapods.org/pods/KMSegmentedControl –

回答

0

由於您正在使用segmentedControl來執行所需的操作。您可以使用segmentedControl的動作,而不是爲segmentedControl添加GestureRecognizer。就像:

@IBAction func segmentControlValueChanged(_ sender: UISegmentedControl) { 

if segmentControl.selectedSegmentIndex == 0 { 
    print("called") 
    } else { 
    // do something else 
} 
} 

OR

你甚至可以用

self.yourSegmentedControl.addTarget(self, action:#selector(segmentTapped(_:)), forControlEvents: .ValueChanged) 

func segmentTapped(sender: UISegmentedControl) 
{ 
    print("called") 
// Do what you want 
}