2017-08-22 20 views
2

我非常想複製相同的TabBar彈出,你在Yelp的應用中看到(在底部截屏前,後)。不管什麼查看你可以按中央tabBar項目並彈出將出現。彈出從的TabBar(像Yelp的應用程序)

巧合的是,我有5個tabBar項目(如Yelp)和我想要爲每個圖像和標題(如Yelp)有三個彈出窗口。看到我正在嘗試做的事情已經在應用程序中完成,這表明我可能會這樣做,但我不知道該怎麼做。我試圖改變視圖控制器之間的關係類型或以編程方式執行,但似乎沒有任何工作。 我錯過了什麼或做錯了什麼?

的TabBar控制器代碼:

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 
    if viewController.tabBarItem.tag == 1 { 
     return false 
    } else { 
     return true 
    } 
} 

之前按

After Press

Before Press

回答

3

一個解決辦法是採用UITabBarControllerDelegate

這樣我們就可以使用委託的func tabBarController(UITabBarController, didSelect: UIViewController)方法來改變規則的表現行爲,並展示我們的彈出窗口來代替。我們可以找到相對於標籤欄按鈕所需的偏移量(按照CGPoint),然後應用該偏移量並將彈出按鈕添加爲子視圖。 請注意,對於此方法,您需要以編程方式設置彈出式按鈕的框架。

或者,你也可以讓一堆彈出按鈕和點擊時設置他們的阿爾法0和1。希望這有助於!謝謝:)

+0

我會永遠愛我的代碼來實現這一點,最好的第二個,因爲它似乎更容易添加的,但我似乎與它有麻煩。我使用你的第一個鏈接,現在用的是'shouldSelect'方法在我的'UITabBarController'中我給了中間的TabBar項目1標籤,並在方法我接着說:如果viewController.tabBarItem.tag == 1 { 返回假 }其他{ 還真 }'但是當它仍然傳輸到該視圖中間項用戶按下。我究竟做錯了什麼? –

+0

@AlessandroProspato,您能否向我們提供您的代碼片段或我可以看到的內容以驗證發生了什麼? **編輯**:'應該選擇'是運輸到視圖,所以如果你想留在相同的視圖,返回false。不要在該方法中做任何其他事情。 DidSelect將會有你的彈出窗口。 ShouldSelect將停止運輸。查看返回值部分:https://developer.apple.com/documentation/uikit/uitabbarcontrollerdelegate/1621166-tabbarcontroller –

+0

感謝您的快速響應!我已經爲'shoudSelect'添加了我的代碼。由於某些原因,這個代碼仍然在運送我。我還沒有添加任何東西到'didSelect',因爲我不知道該如何放置它 –