1

我有以下一段代碼。這是一個菜單(名爲CarbonKit)的第三方庫。當我嘗試選擇特定片段(標籤)並添加手勢識別器時,它不起作用。任何想法我做錯了什麼?UITapGestureRecognizer不適用於特定的[UIView]數組

要清楚,我在handleTap中放置了一個斷點,它甚至不會輸入函數。

override func viewDidLoad() { 
     super.viewDidLoad() 
     self.view.userInteractionEnabled = true 
     let tgr : UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(OverviewFolder.handleTap(_:))) 
     // segment 2 (categories) 
     carbonTabSwipeNavigation.carbonSegmentedControl?.segments![2].userInteractionEnabled = true 
     carbonTabSwipeNavigation.carbonSegmentedControl?.segments![2].addGestureRecognizer(tgr) 
} 

// tap 
    func handleTap(gestureRecognizer : UITapGestureRecognizer){ 
     let test = carbonTabSwipeNavigation.currentTabIndex 
     if test == 2 { 
      print("second item tapped") 
     } 
    } 
+0

您是否檢查過'carbonSegmentedControl'是否不添加手勢?你也使用Swift 2或Swift 3嗎? – alexburtnik

+0

@alexburtnik我正在使用Swift 2.3,並且carbonSegmentedControl不是nill,它返回可選(>) – SoundShock

+0

幾個想法。首先,CarbonTabSwipeNavigation是什麼?接下來,假設carbonSegmentedControl是您的UISegmentedControl,您爲什麼要嘗試將點按手勢添加到特定按鈕?它已經**有**內置的水龍頭。難道你不能簡單地針對UISegmentedControl.valueChanged()進行編碼並檢查selectedSegmentIndex嗎? – dfd

回答

0

如果第三方UISegmentedControl與通用類似,您已經擁有了您需要的一切。這是我的一些代碼。如果您正在使用IB,請將控制線連接至IBAction。

let imageSegments = UISegmentedControl (items: ["Original","Stained"]) 

override func viewDidLoad() { 
    super.viewDidLoad() 
    imageSegments.tintColor = UIColor.yellow 
    imageSegments.selectedSegmentIndex = 1 
    imageSegments.addTarget(self, action: #selector(changeImageView), for: .valueChanged) 
    view.addSubview(imageSegments) 
} 

func changeImageView() { 
    switch imageSegments.selectedSegmentIndex { 
    case 0: 
     imageView.image = imgOriginal 
    case 1: 
     imageView.image = imgEdited 
    default: 
     break 
    } 
    imageView.setNeedsDisplay() 
} 
+0

當我再次按下已經按下的片段時(這是我實際需要它給我發送更改的那一刻),這不起作用。任何方式,我怎麼能做到這一點? – SoundShock

+0

原因是由於分段控制**應該如何操作。我現在看到你的問題。我的猜測 - 就是這個猜測 - 就是你遇到了衝突。也就是說,UISegmentedControl的「開箱即用」功能在響應器鏈上比抽頭識別器(在您的原始問題中)更高,並且輕敲(1)在接收器中被「壓制」或「取消」 UISegmentedControl - 因爲你已經**已經**使用該段,因此(2)那個水龍頭永遠不會超越它。關於你能做的唯一事情就是重新思考,重新設計你的UI或者繼承。 – dfd

相關問題