簡體   English   中英

iPhone UIView:是否可以僅在子視圖上啟用用戶交互?

[英]IPhone UIView:Is it possible to enable userinteraction only on subviews?

我創建了一個顯示按鈕的ViewController,該按鈕用於將視圖滑動到屏幕上。 這個想法是例如在屏幕上放置三個這樣的視圖控制器,從而在屏幕底部提供三個按鈕來提供導航。

視圖控制器堆疊在一起,因此最上面的一個現在覆蓋了其他視圖,因此覆蓋了其他按鈕。 在這種情況下,只有頂部viewcontroller的按鈕起作用,在此情況下,我希望所有這三個按鈕都可以單擊。 我嘗試在視圖上禁用用戶交互,僅在按鈕上啟用它,但是看起來超級視圖設置取代了子視圖設置。

有任何想法嗎?

您似乎將視圖及其控制器弄混了:viewController沒有堆疊,它們只是nib或xib文件的一部分。 另一方面,視圖可能是視圖層次結構的一部分,並且在這種意義上可以彼此重疊。 viewController的功能是管理和協調屏幕上的各種視圖。 使用視圖控制器來管理單個按鈕效率不高:控制器的目的是促進各種按鈕之間的通信(例如,在觸摸數字3時禁用按鈕1,2和4)。 @bpapa關於蘋果不鼓勵使用多個viewController的說法不再正確。 《 iOs應用程序編程指南》中的本節Windows,視圖和視圖控制器指出:

視圖控制器直接管理單個頂級視圖,並且可以管理該視圖的全部或部分子視圖。 對於簡單的用戶界面,視圖控制器通常管理其視圖層次結構中的所有視圖。 但是,對於由幾個不同部分組成的更復雜的界面,視圖控制器可以管理視圖的子集,並依靠一個或多個自定義控制器對象來管理視圖層次結構中的其他視圖組。

在文檔中沒有明確說明的一件事,但在過去的幾周中讓我很痛苦的一件事是, 只有當viewController是筆尖的文件所有者時, 才能將viewController作為UIControl操作的目標。 舉例來說,您有一個筆尖,其中包含兩個viewControllers,gameViewController和scoreViewController。 gameView可能包含充當游戲塊的幾個按鈕,觸摸它們會向gameViewController的-(void)pieceHasBeenTouched:(id)sender方法發送操作消息。 如果gameViewController是文件的所有者,這將非常有用。

現在看來,如果在scoreView中有一個按鈕可以讓它向scoreViewController發送消息,例如saveScore或類似的東西,似乎是合乎邏輯的。 由於某些原因,我還不太清楚,Responder鏈不會讓您使用。 您需要使分數視圖中的“保存”按鈕將其操作消息發送到gameViewController。

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

將此添加到您的服裝UIView代碼: hitTest:withEvent:

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

我指的是: UserInteraction僅啟用subview 我已經測試了代碼。 而且有效!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM