2014-12-31 2 views
-1

Вот так: Я получаю уведомление о знаках класса A и A, когда приложение приходит из фона на передний план. Я получаю еще один класс B, который унаследован от класса A.Использование NSNotificationCenter в отношениях родителя и детей

Итак, если я реализую селектор как для классов A, так и для класса B. Какой селектор получит вызванное событие? Как я могу реализовать селектор только для класса B? Это что-то вроде родителей-детей?

+1

Вы попробовали? Что происходит? Лучше всего попробовать свой код перед отправкой вопроса. – rmaddy

ответ

1

ОК, поэтому скажем, что вы регистрируетесь для уведомлений в методе viewDidLoad (предположим, вы используете UIViewController) в классе A; и отмена регистрации для уведомлений в методе viewWillDisappear:. Затем, пока вы вызываете super в эквивалентные методы вашего подкласса (класса B), ваш класс получит эти уведомления.

Чтобы ответить на эти уведомления, вы создаете метод, определенный в файле .h файла суперкласса (класс A) под названием didEnterForeground, и вы устанавливаете его как селектор, который вызывается, когда ваш суперкласс получает уведомление. Все, что вам нужно сделать, это реализовать didEnterForeground в вашем подклассе (класс B), чтобы отвечать на уведомления.

В качестве примера у меня есть пользовательский класс UIViewController, который определяет определенные типы поведения, которые я хочу быть универсальными для приложения. Мой суперкласс RHViewController обнаруживает некоторые касания (например, три пальца удерживаются более 1 секунды) и вызывает селектор performQuickPrint. Подклассы RHViewController затем реализуют performQuickPrint, чтобы ответить пользователю, удерживая 3 пальца.

Чтобы реализовать код только для подклассов RHViewController, я просто не звоню super.

Это немного напоминает, если вы переопределяете touchesBegan:withEvent: и не вызываете [super touchesBegan:touches withEvent:event];, вы можете потерять много функциональности.

Надеюсь, это поможет.

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