UINavigationBar с категорией, действует как кнопка - PullRequest
0 голосов
/ 17 августа 2010

в моем приложении для iphone, я пытаюсь сделать так, чтобы моя панель навигации действовала как кнопка, я имею в виду сделать что-то, когда я касаюсь ее. Нет кнопки возврата на любой элемент навигации, сама панель. вот как я "классифицировал" это:

@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
    UIColor *color = [UIColor blackColor];
    UIImage *img    = [UIImage imageNamed: @"bar.png"];
    [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    self.tintColor = color;
}

Действие будет переход к некоторому представлению ..
Есть идеи?
Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 18 августа 2010

Не используйте категории для переопределения методов из класса.Из руководства Язык программирования Objective-C :

Хотя в настоящее время язык позволяет использовать категорию для переопределения методов, наследуемых классом, или даже методов, объявленных в интерфейсе класса,Вам настоятельно не рекомендуется использовать эту функцию.Категория не является заменой для подкласса.Есть несколько существенных недостатков:

  • Когда категория переопределяет унаследованный метод, метод в категории может, как обычно, вызывать унаследованную реализацию через сообщение super.Однако если категория переопределяет метод, который уже существовал в классе категории, невозможно вызвать исходную реализацию.

  • Категория не может надежно переопределить методы, объявленные в другой категориитот же класс.Эта проблема имеет особое значение, поскольку многие классы Какао реализованы с использованием категорий.Определенный каркасом метод, который вы пытаетесь переопределить, сам мог быть реализован в категории, и поэтому реализация, которая имеет приоритет, не определена.

  • Само присутствие некоторых методов может вызвать изменения поведенияво всех рамках.Например, если вы добавите реализацию windowWillClose: к NSObject, это заставит всех делегатов окна реагировать на этот метод и может изменить поведение всех экземпляров экземпляров NSWindow.Это может вызвать таинственные изменения в поведении и привести к сбоям.

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

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

0 голосов
/ 17 августа 2010

Попробуйте переопределить эти три функции в своей категории: http://developer.apple.com/iphone/library/documentation/uikit/reference/UIResponder_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006783-CH4-SW13

...