2013-10-02 2 views
2

У меня есть приложение, которое я переношу на iOS 7. Однако UIBarbuttonItem s не имеют названия, но работают нормально. Вот мой код:UIBarbuttonItem не имеет названия на ios 7

UIBarButtonItem * uibbShare = [[[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"sharewhite.png"] style:UIBarButtonItemStylePlain target:self action:@selector(sharePressed:)] autorelease]; 
// uibbShare.width = 56.0; // uncommenting this doesn't change anything 
uibbShare.title = @"Share"; 

Затем я добавляю некоторые из них на панель инструментов с некоторыми гибкими космическими элементами между ними.

... 
[items addObject:flex2]; 
[items addObject:uibbShare]; 
... 

[self.toolbar setItems:items animated:NO];

КСН 7 они не имеют никакого названия вообще, на iOS6 все работает нормально. Не можете ли вы создать такие кнопки в ios7?

Update Такая же проблема на Dev форуме:

UIBarButtonItem can't have both title and image?

What happened to the text under toolbar icons?

Edit: (7 против 6)

enter image description here

Edit 2: (картинка из Reveal, кажется, текст исчезает, и кадр/границы равны 0. WTF)

enter image description here

+0

Я могу видеть ниже на картинке, чем isHidden. Может быть, это проблема? – RFG

+0

Это может быть, но это внутренний вид, не может (и не хочет) его получить ... Странно, что я нигде не скрываю его, не используйте панель инструментов только в строках кода выше в 'viewDidLoad'. Если я инициализирую его заголовком (без изображения), он отобразит текст ... Я бы хотел, чтобы оба ... – Templar

+0

Можете ли вы получить доступ к программному обеспечению этого свойства и изменить его? Что-то вроде UIButtonLabel.hidden = НЕТ. – RFG

ответ

0
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont 
    fontWithName:@"YOURFONT" size:14], NSFontAttributeName, 
    [UIColor whiteColor], NSForegroundColorAttributeName, nil]; 

[[UINavigationBar внешний вид] setTitleTextAttributes: атрибуты]; Ключ должен использовать NSFontAttributeName и т. Д. Я предполагаю, что они переходят к использованию сорта NS для 64-битной совместимости. Приведенный выше код работает на моем устройстве iOS7

+1

Ну, это изменяет навигационную панель, а не 'UIToolbar'. – Templar

0

Попробуйте изменить внешний вид кнопки:

[[UIBarButtonItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIColor textColor], UITextAttributeTextColor, [UIFont yourFont and yourSizeSont], UITextAttributeFont, [UIColor shadowColor], UITextAttributeTextShadowColor, [NSValue valueWithCGSize:CGSizeMake(0.0, -1.0)], UITextAttributeTextShadowOffset, nil] forState:UIControlStateNormal]; 

После моего предыдущего комментария Я думал, в чем-то вроде этого:

NSArray *views = [_UIToolbarNavigationButton subviews]; 

for (UIView *view in views) { 
    if ([view isKindOfClass:[UIButtonLabel class]]) 
    { 
     view.hidden = NO; 
    } 
} 

I не знаю, если это будет полезно.

+0

Это изменяет 'UIBarButtonItems' на панели навигации, но на моей панели инструментов элементы все те же, без заголовка :( – Templar

1

В конечном итоге в результате создавались пользовательские образы для UIBarButtonItems. Это не приятно, но это работает на мгновение. Я просто передаю старые UIBarButtonItems для этой функции, которая возвращает новую.

Примечание: Я просто перемещаю изображение кнопки, если есть заголовок, и добавьте простую метку ниже, а не на самом деле возиться с titleEdgeInsets и центрированием. Кроме того, я устанавливаю ширину по умолчанию 56.

-(UIBarButtonItem *)convertToButton:(UIBarButtonItem *)original 
{ 
    if (SYSTEM_VERSION_LESS_THAN(@"7.0")) 
     return original; 

    CGFloat textFieldHeight = 13.f; 
    UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button.frame = CGRectMake(0, 0, 56, self.toolbar.frame.size.height); 
    button.showsTouchWhenHighlighted = YES; 
    [button setImage:original.image forState:UIControlStateNormal]; 
    [button addTarget:original.target action:original.action forControlEvents:UIControlEventTouchUpInside]; 
    button.tag = original.tag; 

    UIView * wr = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 56, self.toolbar.frame.size.height)] autorelease]; 
    [wr addSubview:button]; 
    wr.backgroundColor = [UIColor clearColor]; 

    if (original.title != nil) 
    { 
     button.imageEdgeInsets = UIEdgeInsetsMake(-7, 0, 0, 0); 
     UILabel * l = [[[UILabel alloc] initWithFrame:CGRectMake(0, self.toolbar.frame.size.height - textFieldHeight, 56, textFieldHeight)] autorelease]; 
     l.font = [UIFont systemFontOfSize:11.f]; 
     l.backgroundColor = [UIColor clearColor]; 
     l.textColor = [UIColor lightGrayColor]; 
     l.textAlignment = UITextAlignmentCenter; 
     l.text = original.title; 
     [wr addSubview:l]; 
    } 

    UIBarButtonItem * theNew = [[[UIBarButtonItem alloc] initWithCustomView:wr] autorelease]; 
    theNew.tag = original.tag; 
    theNew.width = 56; 
    return theNew; 

} 
Смежные вопросы