【问题标题】:No visible interface for UITabBarItem when trying to set selectedImage尝试设置 selectedImage 时,UITabBarItem 没有可见界面
【发布时间】:2016-02-08 10:46:41
【问题描述】:

我看到您可以添加 selectedImage 以及 UITabBarItem 的图像,所以我修改了一个 Cordova 插件来添加:

UIImage *tabIcon = [UIImage imageNamed:imageName];
UIImage *selectedTabIcon = [UIImage imageNamed:selectedImage];
tabIcon = [tabIcon imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
selectedTabIcon = [selectedTabIcon imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
item = [[UITabBarItem alloc] initWithTitle:title image:tabIcon tag:tag selectedImage:selectedTabIcon];

其中 selectedImage 变量是此处插件传入的字符串:

  NSString  *name      = [arguments objectAtIndex:0];
  NSString  *title     = [arguments objectAtIndex:1];
  NSString  *imageName = [arguments objectAtIndex:2];
  NSString *selectedImage = [arguments objectAtIndex:3];
  int tag              = [[arguments objectAtIndex:3] intValue];

但是,当我尝试编译时,我收到以下错误:

/Users/tomchambers/work/cordova-ios-tab-bar/src/ios/CDVTabBar.m:266:34: 错误:没有可见的@interface 对于 'UITabBarItem' 声明选择器 'initWithTitle:image:tag:selectedImage:' item = [[UITabBarItem alloc] initWithTitle:title image:tabIcon tag:tag selectedImage:sel... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~ 产生 1 个错误。

** BUILD FAILED **

我对目标 C 没有经验,所以我认为这可能是我在这里遗漏的一些简单的东西。


当使用不同的方法时(图像肯定存在):

  UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"random" image:[UIImage imageNamed:@"www/assets/images/tab-bar-icons/ic_mail_outline.png"] selectedImage:[UIImage imageNamed:@"www/assets/images/tab-bar-icons/ic_mail_outline.png"]];

2016-02-08 11:48:31.367 Movidiam[1847:843403] Apache Cordova native platform version 3.9.2 is starting.
2016-02-08 11:48:31.369 Movidiam[1847:843403] Multi-tasking -> Device: YES, App: YES
2016-02-08 11:48:31.372 Movidiam[1847:843403] Unlimited access to network resources
2016-02-08 11:48:31.679 Movidiam[1847:843403] [CDVTimer][statusbar] 152.289033ms
2016-02-08 11:48:31.680 Movidiam[1847:843403] [CDVTimer][TotalPluginStartup] 152.797997ms
2016-02-08 11:48:31.847 Movidiam[1847:843403] Resetting plugins due to page load.
2016-02-08 11:48:34.294 Movidiam[1847:843403] -[__NSDictionaryM intValue]: unrecognized selector sent to instance 0x13f82d430
2016-02-08 11:48:34.295 Movidiam[1847:843403] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDictionaryM intValue]: unrecognized selector sent to instance 0x13f82d430'
*** First throw call stack:
(0x1834f9900 0x182b67f80 0x18350061c 0x1834fd5b8 0x18340168c 0x1000eaf4c 0x100102528 0x100101df4 0x183ebbe20 0x1834b0efc 0x1834b0990 0x1834ae690 0x1833dd680 0x1848ec088 0x188254d90 0x1000c7814 0x182f7e8b8)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

【问题讨论】:

    标签: ios objective-c cordova


    【解决方案1】:

    您用来实例化 TabBarItem 的方法不存在。您必须使用其中任何一种:

    UITabBarItem * item = [[UITabBarItem alloc] initWithTitle:@"title" image:[UIImage imageNamed:@"image.png"] tag:1];
    

    UITabBarItem *item1 = [[UITabBarItem alloc] initWithTitle:@"title" image:[UIImage imageNamed:@"image.png"] selectedImage:[UIImage imageNamed:@"selectedImage.png"]]; 
    

    【讨论】:

    • 我不明白第二个选项和我目前使用的有什么区别。他们似乎都使用UITabBarItem alloc
    • 您可以使用标签或选定的图像,但您正在使用 UITabBarItem 上不存在的两种东西。
    • @Tom 你明白问题出在哪里了吗?
    • 我现在明白了 - 我看到他们有不同的签名。我是 javascript 开发人员,所以我不习惯函数重载!
    • @Tom Objective-C 中没有方法/函数重载。这些方法不仅签名不同,名字也不同,一个叫initWithTitle:image:tag:,另一个叫initWithTitle:image:selectedImage:
    猜你喜欢
    • 2013-04-21
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多