UIBotton поверх UIPopoverController исчезает - PullRequest
0 голосов
/ 04 марта 2012

Я делаю приложение для создания слайд-шоу фотографий для iPAD.Я позволил пользователям выбирать свои фотографии, открывая UIPopoverController.К этому всплывающему окну я добавил пользовательскую кнопку «Готово».Теперь здесь, где это становится дурацким.Когда всплывающее окно запускается в первый раз, вы видите кнопку «Готово».Когда я нажимаю на фотоальбом, кнопка «Готово» исчезает, и если я возвращаюсь на главную страницу выбора фотографий, она также исчезает оттуда.Смотрите скриншоты.

enter image description here

enter image description here

enter image description here

Вот код, который я использую.Что в мире здесь происходит?Я думаю, что у меня есть правильный код.

-(IBAction)selectExitingPicture
{
    //Specially for iPAD
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    imagePicker.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeImage];

    popoverController = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
    [popoverController presentPopoverFromRect:CGRectMake(0.0, 0.0, 400.0, 300.0) 
                             inView:self.view
           permittedArrowDirections:UIPopoverArrowDirectionAny 
                           animated:YES];

}


- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
    UINavigationItem *ipcNavBarTopItem;

    NSLog(@"Inside navigationController ...");

    // add done button to right side of nav bar
    doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStylePlain  target:self action:@selector(saveImages:)];

    bar = navigationController.navigationBar;
    [bar setHidden:NO];
    ipcNavBarTopItem = bar.topItem;
    ipcNavBarTopItem.rightBarButtonItem = doneButton;

}

1 Ответ

2 голосов
/ 04 марта 2012

Вместо того, чтобы самостоятельно определить верхний элемент навигации, вы можете получить тот, который вы ищете, из переменной viewController, переданной методу UINavigationControllerDelegate. Кроме того, вы можете кэшировать doneButton, чтобы не создавать его заново каждый раз, когда изменяется контроллер вида сверху средства выбора изображений:

- (void)navigationController:(UINavigationController *)navigationController
        willShowViewController:(UIViewController *)viewController
        animated:(BOOL)animated
{
    if (!doneButton) {
        doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                      style:UIBarButtonItemStylePlain
                      target:self action:@selector(saveImages:)];
    }

    viewController.navigationItem.rightBarButtonItem = doneButton;
}
...