1

У нас есть пользовательская реализация QLPreviewController, поэтому мы можем управлять кнопками, представленными пользователю, и их действиями. Я добавил следующий код viewWillAppear метод пользовательского класса:Наследует QLPreviewController, сменил кнопки на navigationItem сбрасываются после нажатия «Главная»

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(openWithPressed:)]; 
    UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissPressed:)]; 
    [self.navigationItem setRightBarButtonItem:rightBarButtonItem]; 
    [self.navigationItem setLeftBarButtonItem:leftBarButtonItem]; 
    [rightBarButtonItem release]; 
    [leftBarButtonItem release]; 
} 

просмотрщик действительно появляется с нашими пользовательские кнопки, и они работают, как и ожидалось.
Наша проблема возникает, когда пользователь нажимает кнопку «Главная». Он устанавливает, что метод UIApplication.doEvents вызывает методы кнопки set navigationItem и сбрасывает их до исходных значений (с помощью исходных обработчиков).
Как я могу предотвратить это, или обрабатывать эти события самостоятельно, и перезаписать их своими собственными кнопками?

ответ

2

У меня была эта проблема. Вам необходимо настроить NSNotification, которая вызывается, когда приложение снова активируется, а затем сбросит навигационную панель так, как вы хотите.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(configureNavBar) 
              name:UIApplicationDidBecomeActiveNotification object:nil]; 
+0

Спасибо за идею. Я использовал уродливое обходное решение до сих пор, с флагом, переписывая получателя nativeItem и возвращаю фиктивный объект, чтобы ОС не изменила реального. Мне это действительно не понравилось. Ваше решение действительно намного элегантнее. –