根据 ios 版本不同的 ViewController

Posted

技术标签:

【中文标题】根据 ios 版本不同的 ViewController【英文标题】:Different ViewControllers according to ios versions 【发布时间】:2013-12-04 08:53:15 【问题描述】:

我有一个UICollectionViewControllerTabBarViewController,适用于ios 6.0 和更高版本的ios。如果设备的版本早于iOS 6.0,我想知道是否有任何方法可以使用不同的ViewController。例如,我可以将UITableView 用于使用iOS 6.0 之前版本的设备,将UICollection 用于使用iOS 6.0 和后续版本的设备吗?

我也试过PSTCollectionView,但它有一些问题。

我添加了一张显示我的故事板的图片。我的收藏在 TabBarController 中,如果设备在 iOS 6.0 之前使用,我想更改为 TableView。

【问题讨论】:

请使用这个***.com/a/5337804/1091539,这是这个问题的最佳答案 Check iPhone iOS Version的可能重复 @Mutawe 我在发布这个问题之前检查了这个。但我不知道根据版本将不同控制器处理成 TabbarViewController 的方式。这是我真正想要的。 【参考方案1】:

有一个非常简单的解决方案

例如,在您的 tabBarControllers 中,索引 2 用于 CollectionView,而索引 3 用于 TableViewController

只需在情节提要中完成所有必需的设置图标名称等

现在在您的 ApplicationDidFinishLaunchingWith 选项中执行此操作

我假设你的 tabbarController 是 rootViewContrller 这样做

UITabbarController *tabbarController = (UITabBarController *)self.window.rootViewController;
NSMutableArray *arrayControllers = [NSMutableArray arrayWithArray:tabbarController.viewControllers];
if (OlderVersion) //Check
    [arrayControllers removeObjectAtIndex:2];
else
    [arrayControllers removeObjectAtIndex:3];

[tabbarController setViewControllers:arrayControllers];

【讨论】:

谢谢 Raheel。这会起作用。所以如果我的 tabBarController 不是 rootViewController 我必须在 viewWillAppear 方法中执行此操作? 没有得到这个场景,但是如果你的 tabbarController 不是 rootViewController 然后通过 StoryBoard Id 得到它,首先在 Identity Inspector 的 storyBoard 中设置 ID 然后 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"YourStoryBoardName"捆绑:无]; UITabBarController *tabbarController = [storyboard instantiateViewControllerWithIdentifier:@"TabbarControllerStoryBoardId"];//storyboardId【参考方案2】:

是的,你可以这样做。

用这个获取手机的版本:

[[UIDevice currentDevice] systemVersion]

然后,根据值加载正确的视图控制器。

【讨论】:

感谢您的回复。我知道如何检查设备使用的 ios 版本,但我想知道如何处理情节提要中的控制器 根据版本使用 performSegue 我的 CollectionViewController 与 storyboard 中的另一个屏幕相连。我可以在 storyboard 中为旧版本设计另一个断开连接的 ViewController 并在代码中的某处调用它吗? @RaheelSadiq 我不知道该怎么做,因为我的收藏在 TabBarViewController 中,它有自己的 segues。 @hoya21 我不知道你的 storyBoard 的设计,但如果你对 segues 感到不舒服,那么让 storyBoard 引用那个 ViewController 并按你喜欢的方式推送/呈现模式。请参阅此,以供此参考***.com/questions/19700439/…【参考方案3】:

您需要向视图控制器添加标识符

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
if(versionValue>=7)

    UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"viewControllerIOS7"];

else

    UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"viewControllerIOS6"];

希望对您有所帮助。

【讨论】:

感谢您的宝贵时间。你能告诉我我必须在哪里使用它,因为我的 ViewController 在 TabBarViewController 中吗? 您应该在创建 TabBarViewController 时使用它,当您将集合视图添加到标签栏时。我假设您使用故事板,但要完成这项工作,您必须重构代码并且必须以编程方式进行。【参考方案4】:

是的,您可以通过检查您的版本的以下条件来做到这一点。

NSString *currSysVer = [[UIDevice currentDevice] systemVersion];

    float versionValue=[currSysVer floatvalue];

    if(versionValue>=6)
    
        // do some stuff you want to do here
    

希望对你有所帮助。

【讨论】:

感谢您的回答@Manthan。你能帮我在代码的哪一部分执行此操作,因为我的 UICollectionViewController 在 TabBarViewController 中? systemVersion 是一个浮点值!!

以上是关于根据 ios 版本不同的 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 5 中使用不同的图像 iOS 6 和 iOS 7 [关闭]

iOS之设置用户头像的圆角

iOS 13 中的 prefersStatusBarHidden 问题

根据userAgent判断移动端是iOS 还是android?

swift 中,viewcontroll如果跳转到tabBar页面,我是有一个返回首页的按钮,首页就是登录页面之的页面

一个二维码如何自动识别是安卓(Android)还是苹果(IOS)