Как правильно получить доступ к кнопкам навигационной панели модального вида? - PullRequest
0 голосов
/ 26 февраля 2011

Я создал представление в IB с панелью навигации и таблицей.На навигационной панели я поставил две кнопки, отменил и сделал.Я использую это представление как модальное представление с:

[self presentModalViewController:controller animated:YES];

Моя проблема заключается в том, что я использую:

[self.navigationItem.rightBarButtonItem setEnabled:YES];

для включения правой кнопки.Не работает

Должен ли я назначить делегата?какие фрагменты кода я должен сделать?Это работает, если я создаю IBOutlet для правой кнопки и использую [doneButton setEnabled: YES], но я думаю, что это не правильный путь.

Ответы [ 2 ]

2 голосов
/ 26 февраля 2011

Чтобы разместить панель навигации на контроллере модального представления в конструкторе интерфейсов (и настроить элементы кнопок панели, которые вызывают действия в вашем контроллере подробного представления), вам необходимо пройти уровень косвенности (ваша панель навигации будетв одном .xib, и детали вашего подробного представления будут в другом xib):

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

  • добавьте элементы панели кнопок на панель навигации подробного контроллера и подключите их к IBActions в объекте контроллера подробного просмотра.

  • ваш подробный контроллер должен находиться в отдельном файле .xib

  • создать объект "загрузчик", который просто существует для храненияiboutlet контроллера навигации и установите его в качестве объекта-владельца файла этой xib:

@interface Loader : NSObject
@property (nonatomic, retain) IBOutlet UINavigationController *navVC;
@end

@implementation Loader
@synthesize navVC;
- (void) dealloc
{
    [navVC release];
    [super dealloc];
}
@end

Ваша xibфайл, содержащий контроллер навигации, будет выглядеть следующим образом:

enter image description here

Убедитесь, что объект контроллера навигации подключен к выходу navVC объекта "Loader", и убедитесь, что элементы панели кнопокподключен к желаемому IBActions контроллера вашего детального вида.

Затем вы представляете все это, используя этот код:

Loader *loader = [[[Loader alloc] init] autorelease];
[[NSBundle mainBundle] loadNibNamed:@"ModalVC" owner:loader options:nil];
[self presentModalViewController:loader.navVC animated:YES];
0 голосов
/ 26 февраля 2011

Делегат не имеет никакого отношения к вашей проблеме.

Вы, вероятно, поместили панель навигации прямо в свой вид. Таким образом, такие вещи, как self.navigationItem не работает. У вас есть два варианта ...

Подключите свои кнопки к розеткам в вашем коде и получите к ним прямой доступ.

Или удалите панель навигации из своего представления и представьте свой контроллер вида таким образом ...

MyViewController *vc = [[MyViewController alloc] initWith...];
UINavigationController *navCon = [[UINavigationController alloc] initWithRootViewController:vc];
[vc release];
[self presentModalViewController:navCon animated:YES];
[navCon release];

... и теперь вы можете получить доступ к левой / правой кнопкам с помощью навигационного элемента.

...