2015-04-01 106 views
1

我想向UITextView添加一個輕擊手勢,以便在打開保存對話框時,可以通過點擊UITextView來取消它。但是,當我這樣做時,它取消了textview的正常單擊行爲。現在當我點擊沒有保存抽屜的文本時,它什麼都不做。輕拍確實使用回調方法正確觸發,但取消了UITextView的默認動作(將光標放在任何你點擊的位置)。向UITextView添加手勢會取消默認行爲

// Add gesture to cancel saving 
let singleCodeTextViewTap = UITapGestureRecognizer(target: self, action: Selector("codeTextViewTapped")) 
singleCodeTextViewTap.numberOfTapsRequired = 1; 
codeTextView.addGestureRecognizer(singleCodeTextViewTap) 

func codeTextViewTapped() { 
    if saveDrawerOut { 
     moveFilenameBannerOffScreen() 
     saveAsTextField.text = "" 
    } 
} 

如何在單擊手勢時啓用UITextView的默認行爲?

編輯
我嘗試添加cancelsTouchesInView = false和似乎沒有工作,雖然它似乎像正確的答案。所以,現在我的代碼看起來是這樣的:

singleCodeTextViewTap = UITapGestureRecognizer(target: self, action: Selector("codeTextViewTapped")) 
singleCodeTextViewTap.numberOfTapsRequired = 1 
singleCodeTextViewTap.cancelsTouchesInView = false 
codeTextView.addGestureRecognizer(singleCodeTextViewTap) 

回答

1

設置的singleCodeTextViewTapdelegate到您的視圖控制器,實現gestureRecognizerShouldBegin:並返回false如果saveDrawerOuttrue

+0

太棒了,我假設我需要爲此採用某種協議?那是什麼協議? – Johnston 2015-04-01 14:40:24

+1

你想'UIGestureRecognizerDelegate'。 – damian 2015-04-01 14:40:52

+0

謝謝。我覺得是這樣,但我想仔細檢查。 – Johnston 2015-04-01 14:41:38

1

您也可以將cancelsTouchesInView設置爲false。因此,這將是

singleCodeTextViewTap.cancelsTouchesInView = false 

這將允許手勢識別並轉發到您UITextView

+0

這似乎並沒有工作。我添加了它,並且當我點擊時,textview沒有獲得焦點或將脫字符移動到正確的位置。如果我刪除了這個動作,它當然就起作用了 – Johnston 2015-04-01 14:49:30

1

嘗試singleCodeTextViewTap.cancelsTouchesInView = false

應該讓多個手勢識別和睦相處,彼此。