2014-10-27 32 views
0

我在找出一些東西時有點痛苦點。觸摸向下/向上和在UITableViewController滾動

我有一個uitableviewcontroller,並且每個單元都是靜態的。每個單元格內都有一個文本框。當用戶在文本框上進行TAPS時,我想要發起一個事件。

因此,雖然我希望我的桌子仍然滾動,但我還希望在錄製文本框時點按事件。

很顯然,在uitableviews中,它們會爲您的水龍頭增加一個延遲,因此您必須將手指放下一秒左右才能進行「水龍頭」註冊。我覺得這是直觀的用戶,所以我這樣做是爲了解決它:

for subview in self.tableView.subviews as [UIView] 
    { 
     if subview is UIScrollView 
     { 
      let scroll = subview as UIScrollView 
      scroll.delaysContentTouches = false 
      break 
     } 
    } 

這完美的作品,而現在,當我點擊我的文本框,它立即執行我的點擊事件!但現在的問題是,我的一些文本框位於用戶自然滾動的位置。當他們放下手指(觸摸事件)進行滾動時,不幸的是被點擊事件攔截,並防止滾動,而是執行我的事件。

我真正想要的是,如果用戶放下手指,然後滑動,它不執行觸摸事件。我認爲是聰明的,並且觸摸起來觸摸起來,但是當我放下手指然後把它拿起來時,它什麼也沒做(摸起來內心似乎什麼都不做)。我讀這是因爲它只適用於按鈕和類似的東西,而不是textfields。所以,是的,現在我可以不用我的動作滾動,但是當我點擊文本框並擡起手指時,它也不會執行。

任何想法如何可以

1)允許觸摸起伏和滾動共存,而無需握住我的手指下來了第二和處理與delayContentTouches?

2)當我點擊一個文本框時,以某種方式獲得點擊事件內部事件觸發?

我看到一些信息,在這裏,但似乎並沒有多大幫助: UIButton inside UITableViewCell steals touch from UITableView

謝謝!

回答

0

好吧,幸運的是,我能夠弄清楚這一點。也許需要一些批評/諮詢是否有什麼不理想在這裏,但我所做的就是將它添加到我的子類文本框:

override func canBecomeFirstResponder() -> Bool { 
    performMyFunctionHere() 
    return false 
    } 

所以我回來的第一個響應者假以防止出現任何類型的鍵盤(這是我想要的),而是使用performMyFunctionHere()我可以做我想做的事情(在我的情況下,使行動表選擇器出現)。我在我的視圖控制器中分配動作片選取器,並將其分配給我的子類uitextfield的每個特定實例。說實話,沒有什麼複雜的。我很驚訝這個作品以及它的確如此。

順便說一句,似乎並不重要的一件事是設置如上所述的delaysContentTouches。我猜是因爲現在它使用響應者,它將始終工作?我是否刪除它似乎並不重要,但會喜歡關於是否放棄它的更好的想法。

謝謝!

+0

爲什麼你想要一個無法編輯的文本框?看起來像你想要的是一個按鈕,或者甚至可能是整個單元格都是可點擊的。從延遲內容延遲不是什麼近一秒,你可能不想被這個搞亂。 – skorulis 2014-10-27 04:58:46