如何在没有一个视图控制器创建uitabbar上迅速项内衬它

问题描述:

所以我的问题是我没有创建故事板一个的UITabBarController和我坚持着如何没有的viewController创建中的UITabBar一样的项目。因为我想要做的是我的UITabBarItem的第二项是一个不呈现视图控制器的操作。如何在没有一个视图控制器创建uitabbar上迅速项内衬它

+0

使用标签栏界面,但有一个选项卡*不*去一个新的观点,可能会让用户非常困惑。不过,如果你想这样做,你应该看看'UITabBarControllerDelegate'和/或'UITabBarDelegate' – DonMag

如果你真的想这样做(这是很非标准UI ......),那么你可以添加一个空的视图控制器,但在你的标签栏的委托实施

func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool { 

} 

我实现了这样的事情在一个应用程序(关闭按钮),虽然我使用故事板。关闭按钮是一个的viewController,但我用下面的代码来得到它的作用就像一个普通的按钮:

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 
    // this provides UI feedback that the button has been pressed, even though it leads to the dismissal 
     if viewController == self.viewControllers![4] { 

      viewController.tabBarItem.image? = UIImage(named: "TabBarClose")!.imageWithColor(UIColor.red).withRenderingMode(UIImageRenderingMode.alwaysOriginal) 

      return false 
     } else { 
     return true 
     } 
    } 

override func viewDidDisappear(_ animated: Bool) { 
//sets the close button back to original image 
    self.viewControllers![4].tabBarItem.image = UIImage(named: "TabBarClose")! 
} 

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { 
// this is so it never actually goes to the close buttons viewController 
    currentTab = self.selectedIndex != 4 ? self.selectedIndex:currentTab 
    saveTabIndexToPreferences(currentTab!) 

} 

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { 
    // assign functionality to the close button 
    if item.tag == 100 {// this is old code, there is probably a better way to reference the tab 
     dismissTabBar() 
    } else { 

    }   
} 

EDIT(对于被问了一个问题)

func selectTabIndexFromPreferences() { 
    let defaults:UserDefaults = UserDefaults.standard 
    selectedIndex = defaults.integer(forKey: "songSelectionTabIndex_preference") 
} 

func saveTabIndexToPreferences(_ index:Int?) { 
    if index != nil { 
     let defaults:UserDefaults = UserDefaults.standard 
     defaults.set(index!, forKey: "songSelectionTabIndex_preference") 
    } 
} 

tab-bar close button

+0

谁声明currenttab和saveTabIndexToPreferences – reggie

+0

currentTab仅仅是一个局部变量,我会添加其他功能答案 – solenoid

有一个API符合的方式来做到这一点。

UITabBarControllerDelegateshouldSelect方法,你可以实现:https://developer.apple.com/documentation/uikit/uitabbarcontrollerdelegate/1621166-tabbarcontroller

这些方针的东西:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { 
    if (viewController == self.centerViewController) { 
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Test" message:@"This is a test" preferredStyle:UIAlertControllerStyleAlert]; 
    UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) {}]; 
    [alert addAction:defaultAction]; 
    [tabBarController presentViewController:alert animated:YES completion:nil]; 

    return NO; 
    } 

    return YES; 
}