iOS - Создайте Popover View, используя StoryBoard - PullRequest
3 голосов
/ 22 ноября 2011

Привет, сейчас я пытаюсь создать Pop-OverView, используя Xcode раскадровки. Во-первых, у меня есть

rootViewController, UIViewController, and UITableViewController

Я хочу, чтобы UIView действовал как перелистывание страниц, а UITableView будет отображать popOver под контроллером элемента navigationBar.

Для UITableView я хочу сделать всплывающее окно под контроллером NavigationBar. Проблема в том, что когда я касаюсь элемента «Навигация», чтобы показать UITableViewController, он отображается правильно, но когда я пытаюсь закрыть всплывающее окно, он не закрывается. И затем, элемент навигации не работает хорошо. Он показывает несколько экземпляров popOverView, когда я касаюсь его несколько раз.

Мне кажется, это не имеет смысла. Кто-нибудь может мне помочь или сказать, где найти документацию / учебные пособия по этому вопросу?

UPDATE:

Для UIPopOverController, похоже, он теперь работает хорошо, но он все еще вызывает у меня затруднения, когда я касаюсь элемента навигации несколько раз. Он покажет несколько экземпляров PopOver. Как я могу справиться с этим, чтобы он показывал только один экземпляр?

1 Ответ

3 голосов
/ 15 января 2012

У меня была такая же проблема, и я нашел решение здесь .Обычно вы меняете действие кнопки каждый раз, когда она нажимается, чтобы отобразить или отклонить всплывающее окно.Вот код, с которым я закончил:

@interface FilterTableViewController : UITableViewController {
    UIPopoverController *editPopover;
    id saveEditSender;
    id saveEditTarget;
    SEL saveEditAction;
}

-(void)prepareForSegue:(UIStoryboardPopoverSegue *)segue sender:(id)sender{
    if([[segue identifier] isEqualToString:@"EditFilterSegue"]){
        // Save the edit button's info so we can restore it
        saveEditAction = [sender action];
        saveEditTarget = [sender target];
        saveEditSender = sender;

        // Change the edit button's target to us, and its action to dismiss the popover
        [sender setAction:@selector(dismissPopover:)];
        [sender setTarget:self];

        // Save the popover controller and set ourselves as the its delegate so we can
        // restore the button action when this popover is dismissed (this happens when the popover
        // is dismissed by tapping outside the view, not by tapping the edit button again)
        editPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
        editPopover.delegate = (id <UIPopoverControllerDelegate>)self;
    }
}

-(void)dismissPopover:(id)sender
{
    // Restore the buttons actions before we dismiss the popover
    [saveEditSender setAction:saveEditAction];
    [saveEditSender setTarget:saveEditTarget];
    [editPopover dismissPopoverAnimated:YES];
}

-(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
{
    // A tap occurred outside of the popover.
    // Restore the button actions before its dismissed.
    [saveEditSender setAction:saveEditAction];
    [saveEditSender setTarget:saveEditTarget];

    return YES;
}

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

    // Before we navigate away from this view (the back button was pressed)
    // remove the edit popover (if it exists).
    [self dismissPopover:saveEditSender];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...