Donc, mon problème est que je crée un UITabBarController sans storyboard et je suis coincé avec la façon de créer un élément UITabBar sans Viewcontroller. Parce que ce que je veux faire est le 2ème élément de mon UITabBarItem est une action ne présentant pas un contrôleur de vue.Comment créer un objet uitabbar sur swift sans un View Controller aligné
0
A
Répondre
0
Si vous voulez vraiment faire (il est assez nonstandard UI ...), vous pouvez ajouter un contrôleur de vue vide, mais dans l'onglet bar délégué mettre en œuvre
func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {
}
0
je mettre en œuvre quelque chose comme ça dans une application (le bouton de fermeture), bien que j'utilise des storyboards. Le bouton de fermeture est un viewController, mais j'utilisé le code suivant pour l'obtenir à agir comme un bouton normal:
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 (pour une question qui a été posée)
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")
}
}
0
Il existe une méthode conforme à l'API pour ce faire.
Le UITabBarControllerDelegate
a une méthode shouldSelect
que vous pouvez mettre en œuvre: https://developer.apple.com/documentation/uikit/uitabbarcontrollerdelegate/1621166-tabbarcontroller
Quelque chose le long de ces lignes:
- (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;
}
En utilisant une interface barre d'onglets, mais ayant un onglet * pas * aller à une nouvelle vue, peut être très déroutant pour l'utilisateur. Cependant, si vous voulez le faire, vous devriez regarder 'UITabBarControllerDelegate' et/ou' UITabBarDelegate' – DonMag