2009-08-11 58 views
0

我目前工作的一個應用程序使用此結構:iPhone的UITextView手動registerring觸摸

我有一個視圖控制器,我們將調用MainViewController,用於處理應用程序的所有觸摸事件。 MainViewController具有一個實例變量,一個名爲canvasView的視圖。 canvasView具有一個名爲hiddenTextView的UITextView。

Theres其他不可見視圖和這樣的UITextView不是第一個註冊觸摸。

我如何獲得的UITextView在此配置註冊觸摸?具體來說,要從autoCorection框中進行選擇(實際上它是用於日語漢字選擇,但我認爲它有類似的機制)。

我已經試過:

[canvasView.hiddenTextView的touchesBegan:觸及withEvent:方法事件]

從MainViewController的方法的touchesBegan。我已經完成了觸摸開始,移動和結束。

我認爲它實際上爲我嘗試過的50次左右運行中的一次起作用,但我不知道發生了什麼變化。

我如何能得到這個工作任何想法?

回答

0
[canvasView.hiddenTextView becomeFirstResponder]; 

可能會做你想做的。

iPhone上的響應者鏈是一個稍微棘手的事情。我發現避免重疊控制通常更容易,因此在任何給定的情況下,關於哪個控件應該接收來自哪個觸摸的輸入,它是完全明確的。

如果您重疊了很多控件,並且經常在隱藏或可見的控件之間進行切換,這是一個好兆頭,您可能需要實現更多子類UIViewController,並在這些控件之間切換而不是交換和控件。另一種選擇是製作UIView的自定義子類,並將它們交換出來 - 我的意思是,實際上從子視圖中刪除舊的(不隱藏它),並添加新的子視圖。

當然,有時候隱藏/顯示比子類更容易。

我希望有幫助。參考:Apple's UIResponder docs。 (請注意,任何UIViewControllerUIViewUIResponder一個子類)。

+0

的UITextView的是已經在該點的第一個響應者,雖然,鍵盤,一切都。 試過了,但仍然沒有:(。 我嘗試過使用[[self nextResponder] touchesBegan .....],它在其他情況下將觸摸向下傳遞到其他層,但不是這次 – kiyoshi 2009-08-12 02:05:11

+0

另一個想法:仔細檢查你的UITextView框架和它的超級視圖,我有一個情況,我的控件清晰可見,但沒有觸及,結果問題是它的框架尺寸(0,0) 。看起來響應者不會觸摸,除非觸摸在他們的框架中。 – Tyler 2009-08-12 03:09:50

+1

嗨泰勒,感謝你的迴應。 我最終只是將所有hiddenTextView東西移動到頂部視圖控制器,並確保hiddenTextView是最前面的子視圖。然後,UIResponder的東西自行處理,並在成爲第一響應者之後,不需要進一步的觸摸轉發。我希望UIKit API更透明一些:( – kiyoshi 2009-08-12 03:42:06