2015-12-02 9 views
8

Sto utilizzando una libreria esterna chiamata SwiftyWalkthrough, che consente di esporre solo determinate visualizzazioni sullo schermo per guidare un nuovo utente attraverso l'interfaccia utente della mia app. Il primo elemento che voglio esposto all'utente è un UITabBarItem. Devo trovare l'UIView associato a quello specifico UITabBarItem. Conosco l'indice per l'oggetto e gli ho dato un tag. Ma non ho trovato un modo per loro di aiutarmi a trovare il punto di vista. Certo, voglio solo usare le interfacce pubbliche per realizzare questo.Come posso trovare UIView per un UITabBarItem specifico?

+0

Ci sono molti punti di vista nella voce barra delle schede. quale stai cercando? –

+0

Quello che racchiude il titolo e l'icona nella barra delle schede nella parte inferiore dello schermo. Mi aspetto che sia rettangolare, con un'altezza identica all'intera barra delle schede e una larghezza uguale alla larghezza della barra delle schede divisa per il numero di elementi della barra delle schede. –

+0

penso che non ci sia accesso a UITabbaritem backgroundView, possiamo solo mettere l'immagine personalizzata per l'elemento della barra delle schede, ma non è possibile ottenere lo sfondoView per l'elemento tabbar. –

risposta

19

Ho risolto il problema accedendo alle sottoview del tabBar. Le viste con userInteractionEnabled sono UITabBarItems. Ordinandoli in base ai loro valori minX garantisce che si trovino nello stesso ordine dell'array tabBar.items.

extension UITabBarController { 
    func orderedTabBarItemViews() -> [UIView] { 
     let interactionViews = tabBar.subviews.filter({$0.isUserInteractionEnabled}) 
    return interactionViews.sorted(by: {$0.frame.minX < $1.frame.minX}) 
    } 
} 
+0

Grazie! Davvero bello ed elegante. So che questo può potenzialmente rompersi in futuro, ma non sembra essere un modo migliore ... – elsurudo

1

testato in iOS10 con Objective-C:

[alert setModalPresentationStyle:UIModalPresentationPopover]; 

    UIView *view = [self.tabBar.selectedItem valueForKey:@"view"]; 

    alert.popoverPresentationController.delegate = self; 
    alert.popoverPresentationController.sourceView = self.tabBar; 
    alert.popoverPresentationController.sourceRect = view.frame; 
    alert.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionDown; 

    [self presentViewController:alert animated:YES completion:nil]; 
7

Swift 3 versione per la risposta di Carl Smith

func orderedTabBarItemViews() -> [UIView] { 
    let interactionViews = tabBar.subviews.filter({$0.isUserInteractionEnabled}) 
    return interactionViews.sorted(by: {$0.frame.minX < $1.frame.minX}) 
} 
Problemi correlati