[英]How to stop loading the view on tabbar item selection?
我有一個帶有三個標簽的標簽欄控制器。 在第一個選項卡中,我有一個導航控制器。 現在用戶在第一個選項卡中導航以進行一些付款,因此我禁用了默認的后退按鈕,因為我不希望用戶在交易之間使用后退按鈕。 但是當用戶再次按下選項卡時,他/她導航到根視圖。 如何檢測標簽欄選擇或如何避免再次加載標簽?
請幫我解決這個問題!! 謝謝你 !!
注意:我不確定我的問題是否已經在其他一些帖子中的 stackoverflow 上得到了回答,但我進行了搜索並沒有得到任何答案。 如果是這樣,請隨時將我重定向到該答案並刪除此帖子。 謝謝!
檢查UITabBarControllerDelegate 協議參考。
基本思想是只要用戶單擊選項卡項,就會調用 UITabBarController 委托中的tabBarController:shouldSelectViewController:
選擇器。
因此,通過適當地定義該方法,您有機會在當前視圖控制器被用戶通過單擊選項卡欄中選擇的視圖控制器替換之前進行自己的處理。
因此,如果您希望防止當前視圖控制器被替換,即當事務正在進行時,只需從此選擇器返回 NO。
通過這種方式,您可以打開任何控制器或對特定索引的選擇執行任何操作。
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
let selectedIndex = tabBarController.viewControllers?.firstIndex(of: viewController)!
if selectedIndex == 1{
//Do any thing.
return false
}
return true
}
你必須這樣做..
- (BOOL)tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc
{
UIViewController *tbSelectedController = tbc.selectedViewController;
if ([tbSelectedController isEqual:vc])
{
return NO;
}
return YES;
}
在 Swift 5 中:
繼續 Talha Rasool 的回答,不要忘記在 viewDidLoad 函數中委托 self 。 這將讓當前 MainTabBarController 處理所有委托方法
import UIKit
class MainTabBarController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self // Delegate self to handle delegate methods.
}
func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
let selectedIndex = tabBarController.viewControllers?.firstIndex(of: viewController)!
if selectedIndex == 1{
//Do anything.
return false
}
return true
}
}
當用戶導航到支付控制器時,您可以隱藏標簽欄。
當您導航到另一個視圖時,在您的代碼中使用此代碼
yourcontroller.hidebottombarwhenpushed=YES;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.