2009-10-26 1 views
27

У меня есть несколько объектов UIBarButtonItem в Interface Builder, и я не могу найти никакой опции для установки метки доступности или подсказки для этих кнопок.Установить атрибуты доступности на UIBarButtonItem

Как установить эти атрибуты?

+0

Есть ли способ сделать это на раскадровку в XCode 5? – fatuhoku

ответ

-5

Ознакомьтесь с документацией от Apple по телефону UIAccessibility.

+0

Да, я уже читал документы. Я надеялся, что есть способ сделать это в IB или каким-то другим элегантным способом. Я опубликовал решение kludge, но все еще открыт для более чистого подхода. –

+0

К сожалению, эта возможность не добавлена ​​(пока?) В IB. Я думаю, что ты, наверное, лучший, что ты собираешься сделать сейчас. –

15

Хорошо, так что в Interface Builder нет возможности сделать это, даже если вы можете установить атрибуты доступности для других элементов пользовательского интерфейса, используя IB. Поэтому я поставил метку на моей панели инструментов, а затем добавил этот код в моем метод viewWillAppear:

UIToolbar *bottombar = (UIToolbar*)[self viewWithTag:kBottomToolbar]; 

UIView *view = (UIView*)[bottombar.items objectAtIndex:0]; 
[view setAccessibilityLabel:NSLocalizedString(@"Add Bookmark", @"")]; 
[view setAccessibilityHint:NSLocalizedString(@"Add Bookmark", @"")]; 

и так далее для каждого элемента кнопки ...

Не самый элегантный, но это работает.

+2

Начиная с iOS 5.0 вы можете прямо установить свойство 'accessibilityLabel' на' UIBarButtonItem'. – rmaddy

1

Попытка установить метки доступности вручную не работала для меня с изображениями UIBarButtonItem. Однако, если я задал заголовок вручную, метка будет работать. Но он отображает заголовок под изображением.

В итоге я создал UIButton и использовал его как пользовательский вид для UIBarButtonItem. Единственная потеря - это маскирование изображения, которое выполняет UIBarButtonItem. Добавлен бонус: доступность настраивается в IB.

3

Я получил код выше, чтобы работать с UIBarButtonItems с одной дополнительной линии:

[вид setIsAccessibilityElement: YES];

+0

Это решило проблему. Имейте в виду, что если родительский вид также имеет этот набор в значение «ДА», то подпункты игнорируются. –

7

Я знаю, что это старый, но я просто столкнулся с необходимостью этого. С прошивкой 5.0, теперь вы можете легко установить доступность метку UIBarButtonItem, выполнив:

UIBarButtonItem *btn = [[UIBarButtonItem alloc] init...; 
btn.accessibilityLabel = @"Label"; 

Нет больше хаков.

26

Вы можете использовать «определенные пользователем атрибуты времени выполнения» и указать информацию доступности есть: Runtime attributes

+0

Это простой способ. – mishimay

+1

Быстрая коррекция, для подсказки вы должны использовать 'accessibilityHint', а не' keyPath' – Sirens

17

Это не на самом деле достаточно просто установить Определено время выполнения accessibilityLabel пользователя Атрибут в IB. Вы также должны установить isAccessibilityElement в true. Это сохраняет всю доступную информацию в IB. IB Screenshot

+1

Для соответствия другому элементу тип должен быть локализованной строкой. – OrangeDog

+0

Можете ли вы перевести accessibilityLabel таким образом? – Andy

3

Для этого вы можете использовать IBInspectable, чтобы получить удобные опции в боковой панели Interface Builder.

public extension UIBarButtonItem { 
    @IBInspectable var accessibilityEnabled: Bool { 
    get { 
     return isAccessibilityElement 
    } 
    set { 
     isAccessibilityElement = newValue 
    } 
    } 

    @IBInspectable var accessibilityLabelText: String? { 
    get { 
     return accessibilityLabel 
    } 
    set { 
     accessibilityLabel = newValue 
    } 
    } 
} 

UIBarButton Accessibility options in Interface Builder

https://gist.github.com/KaneCheshire/dcce5246c3399072a5200189bfc53fe2