2012-07-17 73 views
4

我有一個簡單的視圖層次結構示例。如何防止UIView消耗用戶輸入

enter image description here

顯然主視圖空間是主空間中的用戶將與交互。在底部,我有可以彈出的標籤向用戶指出他/她在應用程序的進展中。通常,這些選項卡只佔用底部「自定義選項卡」矩形指示的空間,但它們可以一直向上擴展以填充「空白區域」框。

爲了讓選項卡仍然是可點擊的,我必須使選項卡視圖的框架成爲包含「自定義選項卡」空間和「空白空間」空間的完整矩形。這導致的結果是當「空白空間」沒有彈出選項卡時不與用戶交互,因爲輸入基本上被該UIView使用,而不是通過層次結構的其餘部分轉發。

我想這個問題的根源是「主視圖空間」和「空白+自定義選項卡」都是主窗口的子視圖。

如果用戶沒有主動點擊交互元素,是否有辦法告訴系統將用戶輸入轉發到同級視圖?例如,使用touchesBegan,touchesEnded等方法進行操作,這些方法會向操作系統指示此視圖未使用輸入。

編輯

這裏的視圖的另一個版本,展示了一個選項卡是開放的泰特:

enter image description here

EDIT2

一些簡單的測試後,它會似乎默認行爲是最頂層的視圖首先得到輸入。即使您在UITextField的頂部有明確的UIView,也是如此。將澄清UIView將消耗在輸入,從而防止UITextField被編輯

EDIT3

突片應該工作時,用戶可以點擊一個標籤上(尺寸如在第一圖像)的方式,然後它將展開以顯示與該選項卡關聯的縮略圖視圖(如第二張圖)。然後,用戶可以再次點擊該選項卡關閉它,並將尺寸返回到原始圖片。爲了讓標籤在打開時可點擊,我必須讓包含的視圖基本上足夠大,以包含所有4個標籤,就好像它們是打開的。這會在包含視圖中導致大量空白空間。這個空的空間導致屏幕上的輸入空間實質上是死的。如果主視圖空間中有一個由空白區域覆蓋的按鈕,用戶將無法點擊該按鈕。我希望能夠避免這種行爲,並讓該空白空間覆蓋的按鈕仍然可以點擊。

+0

爲什麼你不只有一個視圖添加到窗口,然後你添加不同的子視圖到那個? – 2012-07-17 14:21:23

+0

什麼樣的類代表'CustomTabs'和'EmptySpace'對象? – holex 2012-07-17 14:23:17

+0

@holex'CustomTabs'和'EmptySpace'只是單個'UIView'子類的一部分 – 2012-07-17 14:24:22

回答

0

而不是試圖「轉發」觸摸,我會修改您的佈局,以便選項卡視圖只有選項卡一樣大,並且只有在需要時纔將其更改爲代碼中較大的矩形。例如,點擊標籤時:

CGRect tabFrame = tabView.bounds; 
tabFrame.origin.y = top_of_emptySpace; 
tabFrame.size.height = height_of_emptySpace + height_of_tabView; 
tabView.frame = tabFrame; 

然後您可以添加所需的內容。當你需要它去了,刪除的內容,然後做:

CGRect tabFrame = tabView.bounds; 
tabFrame.origin.y = top_of_tabView; 
tabFrame.size.height = height_of_tabView; 
tabView.frame = tabFrame; 

可能有一些調整,以使內容顯示出來,只要你喜歡必需的,但這樣一來,當標籤被最小化,你贏了」不必做任何額外的事情,使主視圖正確地響應觸摸。

+0

有多個選項卡,所以當有一個選項卡時,仍然存在死區問題 – 2012-07-17 14:28:14

+0

然後執行相同的操作,但將'.origin.x'和'.size.width'更改爲您所需要的 – jacerate 2012-07-17 14:34:14

+0

如果我改變原點,然後整個視圖移動 – 2012-07-17 14:36:23

0

好吧,這是我會做的方式:

的RootViewController的有兩種觀點,這需要整個屏幕的主要觀點,即添加到窗口之一。和選項卡視圖。

然後,我會添加另一個視圖控制器(理想的UINavigationController)到RootViewController,我將它的視圖添加爲RootViewController視圖的子視圖。

執行任何更改(例如推送新視圖控制器或任何其他操作)都會對子視圖控制器執行。

這樣,您的標籤視圖將始終顯示。要打開一個標籤,你可以創建一個新的視圖,使用動畫或類似的東西顯示在標籤欄的頂部。

+0

創建一個單獨的視圖,我試過了。我現在的設置是根視圖控制器是一個分割視圖,其主要細節視圖是一個導航控制器。我將選項卡添加到分割視圖控制器的視圖中,並遇到同樣的問題 – 2012-07-17 15:06:57