2017-11-25 83 views
1

我試圖在我的視圖控制器中註冊一個方法作爲UISwipeGestureRecognizer的操作。目標視圖是我用UIView子類構建的自定義視圖,因爲這是我想要滑動的目標。我遇到的問題是我不知道如何將動作設置爲UIViewController中的方法。當我將手勢拖放到界面構建器中的視圖時,我可以做到這一點,然後將操作拖出到控制器。選擇器找不到實例方法

func swiped(_ sender: UISwipeGestureRecognizer) { 
} 

func addGestureToView(_ view: CardView) { 
    let gesture = UISwipeGestureRecognizer(target: view, action: Selector("swiped:")) 
    gesture.direction = .up 
    view.addGestureRecognizer(gesture) 
} 

我還試圖用

let gesture = UISwipeGestureRecognizer(target: view, action: #selector(swiped(_:)))

這兩種方法給我的以下異常:

終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因:' - [testapp.CardView swiped:]:發送到實例的無法識別的選擇器

我認爲這是因爲它正在尋找CardView目標中的swiped:,而不是控制器中存在的方法。我如何指定我希望它使用Controller作爲動作,同時將手勢本身只有應用於CardView

+0

嗨@Johnathon Sullinger請再次看到我的答案我已更新我的答案,使用需要使用**自**而不是**查看** –

+0

更改讓手勢= UISwipeGestureRecognizer(target:view,action:#selector( (_ :))) 到 let gesture = UISwipeGestureRecognizer(target:self,action:#selector(swiped(_ :))) –

回答

1

改變這一行:

let gesture = UISwipeGestureRecognizer(target: view, action: Selector("swiped:")) 

到:

let gesture = UISwipeGestureRecognizer(target: self, action: #selector(swiped(_:))) 

說明

目標:在UISwipeGestureRecognizer定義了你的操作方法將被調用,通過定義自我,我們告訴我們我們的滑動手勢動作應該被稱爲來回m UIViewcontroller not from CardView

action: in UISwipeGestureRecognizer定義了應該在滑動手勢上調用的方法。

+0

請寫**#選擇器(**,然後使用自動完成類型swiped方法名稱它會寫** **選擇器(swiped(:_))**或**#選擇器(swiped:)** **這是正確的方式 –

+0

已更新我的回答 –

+0

將目標更改爲'self'工作。 t意識到這是選擇器的目標,而不是手勢本身的目標(這是使用'addGestureRecognizer:'設置的。謝謝 –

相關問題