[英]Placing a UIButton in the same space as UITabBar (When hidden)
我正在開發一個基於UITabBarController
的應用程序。 在我的屏幕設計之一,我需要隱藏標簽欄(我做UIView
的setHidden
方法),那么我放在一個UIView其中tabBar
通常會並添加了UIButton
到UIView
。 但是,當點擊按鈕時,我沒有得到任何回應。 該按鈕不會收到任何觸摸事件。
我已經查看了解決方案的一些問題和答案。 但是大多數都需要子類化。 我已經嘗試了子類化並重寫了HitTest事件,但是即使在我的UIButton子類中也沒有調用該方法。
我正在開發iOS 7.1。
任何人都可以對此有所了解,以及如何讓按鈕響應觸摸事件?
編輯
我的自己和@Geet更仔細地研究了這個問題。 似乎任何放置在同一空間的東西都與UITabBar
沒有接收到觸摸事件。 作為測試,我創建了一個新項目,其中包含很少的代碼,可以復制我原來的項目設置。
在示例應用程序中,我們將一個UIViewController
嵌入在UITabBarController
作為第一個選項卡。 然后將UIViewController
嵌入到UINavigationController
。 從那里,我們將第二個UIViewController
推入堆棧。
點擊頂部的“隱藏標簽欄”按鈕即可。 隱藏tabBar。 其中暴露了storyboard
放置的綠色UIView
,其中UIButton
連接到ViewControllers
實現文件。 此按鈕根本不會接收任何觸摸事件。 只要我將按鈕移動到TabBar通常占據的空間上方,按鈕就會起作用。 將其向下移回屏幕底部 - 按鈕不再起作用。
似乎蘋果已禁止UITabBar
下的所有觸摸事件。 我想知道這有什么辦法嗎?
我試過了:
self.tabbar.userInteractionENabled = NO;
這也沒有幫助。
也許有一種方法,我們能夠覆蓋UITabbarController
的子類,當UITabBar
被隱藏時,它將允許觸摸此規范?
如果有人想要使用示例項目 - 它在我的gitHub上:
Tander我終於明白了,按鈕沒有響應,因為它沒有收到我們的觸摸事件,你看到在我們的故事板中,View沒有連接到viewController,並且由於這個,當我以編程方式添加按鈕時它將永遠不會回答,一條簡單的線解決了這個問題
在功能
- (IBAction)doneButton:(UIBarButtonItem *)sender
就這樣做吧
- (IBAction)doneButton:(UIBarButtonItem *)sender
{
/* Will hide or unhide the tabBar */
self.tabBarController.tabBar.hidden=YES;
[self.tabBarController setTabBarItem:nil];
UIButton *butt=[UIButton buttonWithType:UIButtonTypeCustom];
butt.backgroundColor=[UIColor redColor];
butt.frame=CGRectMake(160, 530, 93, 40);
[butt addTarget:self action:@selector(testButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
[self.tabBarController.view addSubview:butt];
}
self.tabBarController.view
是我們的罪魁禍首,不讓觸摸事件通過,很高興找到它
我最近自己遇到過這種情況,在我的情況下,為self.tabBarController.view
添加視圖不是一個選項。
將tabBar設置為半透明(除了隱藏它)允許觸摸通過。
[self.tabBarController.tabBar setTranslucent:YES];
我最近遇到了這個問題,我們使用isHidden
隱藏了UITabBar
但UITabBar
下面的一個子視圖控制器中的UIView
不會收到命中事件。 它到處都收到了事件,但UITabBar
曾經是可見和定位的地方。
前后旋轉手機會使問題消失。 我最終找到的解決方案是在將isHidden
設置為true
您需要在UITabBarController
視圖上調用setNeedsLayout
:
self.tabBarController.tabBar.isHidden = true;
self.tabBarController.view.setNeedsLayout();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.