Я использую внешнюю библиотеку под названием SwiftyWalkthrough, которая позволяет мне отображать только определенные виды на экране, чтобы направлять нового пользователя через пользовательский интерфейс приложения. Первым элементом, который я хочу предоставить пользователю, является UITabBarItem. Мне нужно найти UIView, связанный с этим конкретным UITabBarItem. Я знаю индекс для элемента, и я дал ему тег. Но я не нашел способа помочь им найти точку зрения. Конечно, я хочу использовать только общедоступные интерфейсы для этого.
Как я могу найти UIView для конкретного UITabBarItem?
Ответ 1
Я решил свою проблему, обратившись к subviews tabBar. Представления с userInteractionEnabled - это UITabBarItems. Сортировка их по значениям minX гарантирует, что они находятся в том же порядке, что и массив tabBar.items.
extension UITabBarController {
func orderedTabBarItemViews() -> [UIView] {
let interactionViews = tabBar.subviews.filter({$0.isUserInteractionEnabled})
return interactionViews.sorted(by: {$0.frame.minX < $1.frame.minX})
}
}
Ответ 2
Свифт 3 версии для ответа Карла Смита
func orderedTabBarItemViews() -> [UIView] {
let interactionViews = tabBar.subviews.filter({$0.isUserInteractionEnabled})
return interactionViews.sorted(by: {$0.frame.minX < $1.frame.minX})
}
Ответ 3
Протестировано в iOS10 с помощью 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];