我有一个应用程序,我很久以前一直在工作,但从未完成。最近又开始研究它,我遇到了一个问题。
在 iOS 6 上,此代码可以正常运行:
UINavigationBar *modalNavBar = [editView.subviews objectAtIndex:0];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor blackColor], UITextAttributeTextColor, nil];
[modalNavBar setTitleTextAttributes:dict];
但在 iOS 7 上,它会崩溃并出现以下错误:
- [UILabel setTitleTextAttributes:]:无法识别的选择器发送到实例
该方法清楚地被识别,因为它出现在 UINavigationBar 对象的可用方法列表中。
我已经阅读了有关使用 NSForegroundColorAttributeName 而不是 UITextAttributeTextColor 的内容,但这并未解决 iOS 7 和上的问题iOS 6 会导致颜色无法应用。
有关解决此问题的任何建议吗?
答案 0 :(得分:1)
或许在iOS7和iOS6中如何排序子视图有所不同?我注意到错误说UILabel没有选择器setTitleTextAttributes:,事实上它没有。但是你的代码表明你期望对象是一个UINavigationBar ......但显然它是一个UILabel。所以......
UINavigationBar *modalNavBar = [editView.subviews objectAtIndex:0];
...正在返回错误类型的对象。出于某种原因,当您在iOS7上运行时,您在索引0处获得了UILabel,但在iOS6上运行时,该索引处的UINavigationBar。
答案 1 :(得分:0)
尝试使用已记录的属性获取导航栏。例如,navigationController.navigationBar.titleTextAttributes = textAttributes;
。虽然iOS的一个版本可能会将导航栏放在子视图数组的索引0处,但另一个版本可能会添加另一个视图,以使navigationBar不再位于该索引处。