获取UINavigationBar的默认titleTextAttributes

时间:2013-11-26 07:31:54

标签: ios uinavigationbar

我想在我的应用中使用自定义titleView作为导航栏,以便用户可以编辑它。我正在尝试获取默认字体/对齐/等,以便我可以将其应用于我的新视图,因此它看起来与普通导航栏标题相同。

我正在使用

NSMutableDictionary *myDict = [[NSMutableDictionary alloc] initWithDictionary:self.navigationController.navigationBar.titleTextAttributes];
NSLog(@"%@", myDict);

但这只是显示一个空字典。我已经查看了stackoverflow上的其他答案,建议这应该返回默认字体。

我做错了吗?或者在iOS7中有变化吗?

编辑:感谢下面的caglar,我已经更新了我的代码:

// Get the default title label
UILabel *navigationTitleLabel;
for (UIView *sv in self.navigationController.navigationBar.subviews)
{
    if (sv.subviews.count > 0 && [sv.subviews[0] isKindOfClass:[UILabel class]])
    {
        navigationTitleLabel = (UILabel *)sv.subviews[0];
        break;
    }
}

// Set the new text field to have the same attributes as the default title label
textField.font = navigationTitleLabel.font;
textField.textColor = navigationTitleLabel.textColor;
textField.textAlignment = NSTextAlignmentCenter;
self.navigationItem.titleView = textField;

1 个答案:

答案 0 :(得分:2)

您可以访问导航栏的子视图,因为UINavigationBarUIView的子类。 这适用于iOS 7.在旧版本中,子视图订单可能与此不同。但是,想法是一样的,请查看UINavigationBar的子视图并获得标题。

for (UIView *sv in self.navigationController.navigationBar.subviews)
{
    if (sv.subviews.count > 0 && [sv.subviews[0] isKindOfClass:[UILabel class]])
    {
        self.navigationTitleLabel = (UILabel *)sv.subviews[0];
        break;
    }
}