2017-08-21 16 views
0

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

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

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") 
    } 
} 

tab-bar close button

+0

qui déclare currenttab et saveTabIndexToPreferences – reggie

+0

currentTab est juste une variable locale, et j'ajouterai les autres fonctions à la réponse – solenoid

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; 
}