How can I find the UIView for a specific UITabBarItem?

大憨熊 提交于 2019-11-30 01:41:38

问题


I am using an external library called SwiftyWalkthrough, which allows me to expose only certain views on the screen to guide a new user through my app's UI. The first item I want exposed to the user is a UITabBarItem. I need to find the UIView associated with that specific UITabBarItem. I know the index for the item, and I have given it a tag. But I haven't found a way for them to help me find the view. Of course, I only want to use public interfaces to accomplish this.


回答1:


I solved my problem by accessing the subviews of the tabBar. The views with userInteractionEnabled are UITabBarItems. Sorting them by their minX values guarantees that they are in the same order as the tabBar.items array.

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



回答2:


Swift 3 version of for Carl Smith's answer

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



回答3:


Tested in iOS10 with 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];


来源:https://stackoverflow.com/questions/34051646/how-can-i-find-the-uiview-for-a-specific-uitabbaritem

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!