2010-04-30 65 views
2

我創建了一個viewcontroller,顯示一個按鈕,用於將視圖滑動到屏幕上。這個想法是在屏幕上放置三個這樣的視圖控制器,從而在屏幕底部提供導航的三個按鈕。IPhone UIView:是否有可能僅在子視圖上啓用用戶交互?

視圖控制器堆疊起來,所以到頂端的一個現在覆蓋其他視圖,因此覆蓋其他按鈕。在這種情況下,只有頂級視圖控制器的按鈕正在工作,我希望這三個按鈕都是可點擊的。我試圖禁用視圖上的用戶交互並僅在按鈕上啓用它,但它看起來像超級視圖設置否決了子視圖設置。

任何想法?

+1

我不是100%確定你正在嘗試做什麼,但聽起來像是使用Tab Bar控制器或者presentModalViewController方法或者兩者結合可能會更好?在一個屏幕上運行多個自定義視圖控制器會導致代碼混淆,並且有時會產生古怪的結果,Apple建議不要這樣做。 – bpapa 2010-04-30 12:49:55

+0

這基本上就像使用tabbarcontrollor來呈現模態視圖,它只是實際的按鈕是(模態)視圖控制器的一部分,而不是主屏幕 – Syg 2010-05-01 10:04:42

+0

也許你會更好地嘗試定製一個TabBar控制器,看看你想如何。不知道它是如何可行的。 – Remover 2010-08-08 11:59:39

回答

1

您似乎混淆了視圖及其控制器:viewControllers不是堆疊的,它們只是nib或xib文件的一部分。另一方面,視圖可能是視圖層次結構的一部分,在這種意義上可以相互覆蓋。 viewController的功能是管理和協調屏幕上的各種視圖。使用視圖控制器來管理單個按鈕效率不高:控制器的目的是促進各種按鈕之間的通信(例如,當觸摸第3號時禁用按鈕1,2和4)。 @ bpapa的聲明表示蘋果公司不鼓勵使用多個viewController,這是不正確的。 iOS的應用程序編程指南在本節Windows, Views, and View Controllers規定:

視圖控制器直接管理一個單一的頂級視圖,並可以管理全部或部分該視圖的子視圖。對於簡單的用戶界面,視圖控制器通常管理其視圖層次結構中的所有視圖。但是,對於由多個不同部分組成的更復雜的界面,視圖控制器可以管理一部分視圖,並依靠一個或多個自定義控制器對象來管理視圖層次結構中的其他視圖組。未在文檔明確,但已經咬了我好幾次在過去幾周

一件事是,製作的viewController的UIControl的行動目標只有有效果,如果是的viewController是文件的所有者的筆尖。比方說,你有一個有兩個viewControllers,gameViewController和scoreViewController的筆尖。 gameView可能包含幾個按鈕,作爲遊戲塊並觸摸它們會向gameViewController的 - (void)pieceHasBeenTouched:(id)發送方方法發送操作消息。如果gameViewController是文件的所有者,這很好用。

現在看起來合乎邏輯的是,如果你在scoreView中有一個按鈕,讓它發送消息給scoreViewController,比如saveScore或類似的東西。由於我還不清楚的原因,響應者鏈不會讓你。您需要使Score視圖中的Save按鈕將其操作消息發送到gameViewController。

我通過在兩個控制器之間建立IBOutlet綁定來解決此問題 - 通知是另一種可能性。

+0

自從我問這個問題已經有一段時間了!也許我沒有正確解釋。我很清楚UIViews和他們各自的控制器之間的區別。這裏的視圖控制器不僅僅負責buttonpress動作,它們負責在視圖中滑動覆蓋層並管理內容(如contentview的大小顏色等)。所以它基本上是一個自定義的tabbarcontroller。 – Syg 2010-08-12 09:25:49

+0

不好意思在你的能力上施放灰燼,但是你的觀點是什麼?如果一切工作正常,首先問題不是很好,那麼也許你應該刪除它並縮短未回答列表。 – 2010-08-13 09:13:48

0

給你的代碼添加到您的盛裝UIViewhitTest:withEvent:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 
    UIView *hittedView = [super hitTest:point withEvent:event]; 
    return hittedView == self.button ? hittedView : nil; 
} 

我refered這樣:UserInteraction enable for subview only。我測試了代碼。它的工作原理!

相關問題