Идентификация UIView с помощью NSLog

Я пытаюсь идентифицировать касание в строке состояния iPhone/iPad. Итак, я перегрузил UIApplication и в sendEvent делаю NSLog UIView, который был нажат. Я получаю это:

   <UIStatusBarForegroundView: 0x4e8b9d0; frame = (0 0; 768 20); alpha = 0.75; autoresize = W; layer = <CALayer: 0x4e8ba90>>

Как я могу использовать это для идентификатора этого представления? Я попробовал очевидное:

 [touch.view isKindOfClass:[UIStatusBarForegroundView class]]

Но программа не нашла объект UIStatusBarForegroundView. Решение - проверить кадр, потому что строка состояния всегда будет (0 0; 768 20); и (0 0; 1024 20) для iPad. Это не самое красивое решение, потому что для iPhone будет другая рамка.

Есть ли другое лучшее решение для этого?


person Rodrigo    schedule 21.08.2011    source источник
comment
Что ты пытаешься сделать? Строка состояния является приватным объектом и уже реагирует на прикосновения. Возиться с этим может быть достаточной причиной, чтобы отклонить ваше приложение из магазина.   -  person Dave DeLong    schedule 22.08.2011
comment
Почему именно вы хотите идентифицировать касание в строке состояния? Могут быть обратные вызовы для того, что вы хотите.   -  person Akshay    schedule 22.08.2011
comment
@Dave DeLong, я не буду отправлять его в App Store, это только для запуска экрана отладки. Но хорошо знать, что я не могу этого сделать :P   -  person Rodrigo    schedule 23.08.2011
comment
@Akshay, я не нахожу, как это сделать, как мне получить прикосновение в строке состояния? Я нашел это: cocoawithlove.com/2009/05/ но не сработало. Как я могу легко получить касание в строке состояния?   -  person Rodrigo    schedule 23.08.2011
comment
@ Родриго это возможно; это просто не очень хорошая идея.   -  person Dave DeLong    schedule 23.08.2011


Ответы (2)


Попробуйте использовать приведенный ниже код, чтобы получить имя класса строки состояния, и как только вы узнаете, что возвращает строка состояния из этого вызова, вы можете использовать это в буквальном сравнении строк.

NSString *svClass = NSStringFromClass([touch.view class]);

Как только вы узнаете, что возвращает представление строки состояния, вы можете сделать это:

if ([svClass:compare @"theclassnameyougetbackfromstatusbar"]== NSOrderedSame) {

Надеюсь, это решит проблему, когда программа не находит класс UIStatusBarForegroundView.

person gamozzii    schedule 22.08.2011

Вы можете присвоить номер тега виду:

tag
An integer that you can use to identify view objects in your application.

@property(nonatomic) NSInteger tag
person ennuikiller    schedule 21.08.2011
comment
Не работа. Это системный UIView, и у каждого системного представления тег равен 0. Я не создаю это представление. - person Rodrigo; 22.08.2011