Ios7 iOS 7崩溃,iOS 6正常-UINavigationBar:-[UILabel setTitleTextAttributes:]:发送到实例的选择器无法识别

Ios7 iOS 7崩溃,iOS 6正常-UINavigationBar:-[UILabel setTitleTextAttributes:]:发送到实例的选择器无法识别,ios7,uinavigationbar,Ios7,Uinavigationbar,我有一个应用程序,我工作了很长一段时间,从来没有完成。最近又开始做了,我遇到了一个问题 在iOS 6上,此代码工作正常: UINavigationBar*modalNavBar=[editView.subviews objectAtIndex:0]; NSDictionary*dict=[NSDictionary Dictionary WithObjectsSandKeys:[UIColor blackColor],UITextAttributeTextColor,nil]; [modalNav

我有一个应用程序,我工作了很长一段时间,从来没有完成。最近又开始做了,我遇到了一个问题

在iOS 6上,此代码工作正常:

UINavigationBar*modalNavBar=[editView.subviews objectAtIndex:0];
NSDictionary*dict=[NSDictionary Dictionary WithObjectsSandKeys:[UIColor blackColor],UITextAttributeTextColor,nil];
[modalNavBar setTitleTextAttributes:dict];
但在iOS 7上,它崩溃并出现以下错误:

-[UILabel setTitleTextAttributes:]:发送到实例的选择器无法识别

由于该方法出现在UINavigationBar对象上可用的方法列表中,因此可以清楚地识别该方法

我读过一些关于使用NSForegroundColorAttributeName而不是UITextAttributeTextColor的文章,但这并不能解决iOS 7上的问题,而在iOS 6上,它会导致未应用颜色


关于这个问题的解决方案有什么建议吗?

也许是因为在iOS7和iOS6中子视图的排序方式有所不同?我注意到错误表明UILabel没有选择器setTitleTextAttributes:,实际上它没有。但是您的代码表明您希望该对象是UINavigationBar。。。但显然这是一个UILabel。所以

UINavigationBar *modalNavBar = [editView.subviews objectAtIndex:0];

…正在返回错误类型的对象。由于某些原因,当您在iOS7上运行时,索引0处有一个UILabel,但当您在iOS6上运行时,该索引处有一个UINavigationBar。

尝试使用记录的属性获取导航栏。例如,
navigationController.navigationBar.titleTextAttributes=textAttributes。虽然iOS的一个版本可能会将导航栏放置在子视图数组的索引0处,但另一个版本可能会添加另一个视图,以便导航栏不再位于该索引处。

?啊!事后诸葛亮。我做了一个更改,迭代子视图,直到找到一个UINavigationBar并使用它,它才起作用。我迭代controller.view.subview以找到UITabBarCustomizeView,然后迭代该视图以找到UINavigationBar。适用于iOS 6,但不适用于iOS 7,但至少不会崩溃。好主意。现在,为了弄清楚我应该在-(void)tabBarController:(UITabBarController*)控制器中使用什么,控制器将开始优化ViewController:(NSArray*)ViewController。controller.navigationController.navigationBar和controller.moreNavigationController.navigationBar都不正确,因此,我认为我需要迭代子视图,直到找到一个UINavigationBar,它确实起作用。