Подтвердить что ты не робот

Как я могу найти UIView для конкретного UITabBarItem?

Я использую внешнюю библиотеку под названием SwiftyWalkthrough, которая позволяет мне отображать только определенные виды на экране, чтобы направлять нового пользователя через пользовательский интерфейс приложения. Первым элементом, который я хочу предоставить пользователю, является UITabBarItem. Мне нужно найти UIView, связанный с этим конкретным UITabBarItem. Я знаю индекс для элемента, и я дал ему тег. Но я не нашел способа помочь им найти точку зрения. Конечно, я хочу использовать только общедоступные интерфейсы для этого.

4b9b3361

Ответ 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];