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

时间:2014-08-03 01:51:08

标签: ios7 uinavigationbar

我有一个应用程序,我很久以前一直在工作,但从未完成。最近又开始研究它,我遇到了一个问题。

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 会导致颜色无法应用。

有关解决此问题的任何建议吗?

2 个答案:

答案 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不再位于该索引处。