2014-10-22 92 views
0

我正在使用Xcode 6.1爲Objective-C中的iPhone 5開發iOS 8.1應用程序。使UIControl只接受滑動手勢並傳遞觸摸/輕擊手勢

單擊UITextView時,我會在鍵盤上方彈出一個隱藏的UIControl視圖,以便用戶可以從鍵盤上方向下滑動並關閉鍵盤(然後將UIControl再次移出視圖) 。這工作正常。但是,在鍵盤上方彈出的這個UIControl視圖覆蓋另一個UITextView,因此無法使用覆蓋的文本視圖。每次我嘗試點擊覆蓋的文本視圖時(因爲UIControl不是不透明的而可見),因爲UIControl似乎只是在輕拍而沒有對它們做任何事情,所以沒有任何反應。

我的問題是,我怎樣才能讓UIControl簡單地忽略水龍頭(讓它們直接通過,以便底部的UITextView可以接受它們),然後接受滑動(這樣,當它向下滑動時,它可以關閉鍵盤並移出視圖)?

我已經嘗試了幾種解決方案,但還沒有找到能夠滿足我需要的解決方案。

謝謝!

回答

1

question是類似於你的。將UIControl子類繼承並覆蓋- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event並稱其super變體將其傳遞給其視圖。

+0

感謝您指導我解決這個問題。我沒有時間去測試這個解決方案(而且我從這個問題開始就已經開始了),但是還沒有其他解決方案可以做到這一點,所以我打算將其標記爲已接受。 – 2015-03-26 04:13:22

0

還有另一種方法可以做到這一點。將UIViewController的主視圖更改爲UIControl的子類,而不是UIView。將以下IBAction連接到視圖,以便在輕擊背景時關閉鍵盤。

- (IBAction)backgroundTapped{ 

    [self.view endEditing:YES]; 

} 

Apple Documentation - endEditing:

+0

這是否仍然允許這個主視圖的子視圖接收手勢?難道它不是隻爲自己採取所有的手勢? – 2014-10-22 14:47:23

+0

@EnghanG它不會影響'UITextField',你嘗試過嗎? – Michael 2014-10-22 22:18:55

+0

我還沒有嘗試過,因爲我仍然想要一個類似於我所描述的解決方案。我只是在問,如果我最終不得不回到這個選擇。謝謝。 – 2014-10-22 23:30:09

0

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

使用此事件。如果點擊手勢返回no。

+0

唯一的問題是,我沒有'UIControl'來忽略這個手勢。我想讓手勢通過它到任何下面的視圖。我不認爲你在這裏提供的建議會這樣做,是嗎? – 2014-10-22 14:48:43