Уволить Popover, когда выбран ряд? - PullRequest
2 голосов
/ 23 августа 2011

При выборе строки в главном представлении UISPlitViewControler, когда он находится в режиме всплывающего окна. Разве это не должно уволить автоматически? Как я могу исправить это там?

Обычно я делаю [self.popoverController dismissPopoverAnimated:YES];, но popoverController в этом случае не распознается.

Я думал, что UISplitViewController должен делать это автоматически?

Вот мой код UISplitViewDelegate, который находится в моем detailViewCOntroller:

- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController: (UIPopoverController *)pc
{
    barButtonItem.title = @"Medical Codes";
    NSMutableArray *items = [[self.toolbar items] mutableCopy];
    [items insertObject:barButtonItem atIndex:0];
    [self.toolbar setItems:items animated:YES];
    [items release];
}

// Called when the view is shown again in the split view, invalidating the button and popover controller.
- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
    NSMutableArray *items = [[self.toolbar items] mutableCopy];
    [items removeObjectAtIndex:0];
    [self.toolbar setItems:items animated:YES];
    [items release];
}

В моем приложении делегат:

@property (nonatomic, retain) IBOutlet UISplitViewController *splitViewController;
@property (nonatomic, retain) IBOutlet DetailViewControlleriPad *rightViewController;
@property (nonatomic, retain) IBOutlet RootViewController * leftViewController;

И эти свойства подключены в IB. RootViewController выдвигает на другие представления таблицы, которые должны быть отклонены, когда они выбраны в режиме popover.

редактировать

- (void)setDetailItem:(id)newDetailItem
{
    if (detailItem != newDetailItem)
    {
        [detailItem release];
        detailItem = [newDetailItem retain];
        [self.myTableView reloadData];
    }
}

1 Ответ

3 голосов
/ 23 августа 2011

Мне всегда приходилось явно закрывать поповер вручную.Чтобы сделать это, захватите ссылку на контроллер представления popover, когда он передан моему UISplitViewControllerDelegate:

- (void)splitViewController:(UISplitViewController*)svc 
     willHideViewController:(UIViewController *)aViewController 
          withBarButtonItem:(UIBarButtonItem*)barButtonItem 
       forPopoverController:(UIPopoverController*)pc
{
    splitViewPopover = [pc retain];
    // Other stuff
}

Поскольку я делаю это, я также должен освободить ссылку, когда она больше не действительна:

- (void)splitViewController:(UISplitViewController*)svc 
     willShowViewController:(UIViewController *)aViewController 
  invalidatingBarButtonItem:(UIBarButtonItem *)button 
{    
    [splitViewPopover release];
    splitViewPopover = nil;
    // Other stuff
}

Затем, когда элемент выбран в моем главном контроллере вида, я обновляю свой подробный контроллер и отклоняю всплывающее окно:

[splitViewPopover dismissPopoverAnimated:NO];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...