Контроллер представления всплывающего окна остается постоянным (выделяет только один экземпляр)

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

на iPad я использую другой графический интерфейс, вместо этого у меня есть один основной вид, который всегда остается на экране, а остальные представляют собой всплывающие окна, выходящие из основного вида.

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


person Tom Lilletveit    schedule 14.09.2013    source источник


Ответы (2)


Вы не можете использовать переходы, если хотите, чтобы ваши контроллеры были постоянными, потому что переходы всегда создают экземпляры новых контроллеров. Вы по-прежнему можете использовать раскадровку, но вы должны оставить контроллеры неподключенными, создать их экземпляры в коде и назначить их сильному свойству. Итак, что-то вроде:

-(void)presentPopover {
    if (! self.vc) {
        self.vc = [self.storyboard instantiateViewControllerWithIdentifier:@"MyController"];
    }
    // do what you want here to put vc on screen
}
person rdelmar    schedule 14.09.2013
comment
Я нашел быстрое решение, используя ваш код для инициализации контроллера представления из раскадровки. - person Tom Lilletveit; 15.09.2013

Я нашел решение, и на самом деле это просто, просто используйте UIPopoverController и инициализируйте его с помощью контроллера представления, который вы хотите представить. Таким образом, он не будет создавать новый экземпляр каждый раз, когда запрашивается всплывающее окно.

if (!popoverController)
    popoverController = [[UIPopoverController alloc]initWithContentViewController:bellViewController];


[popoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
popoverController.delegate=self;
person Tom Lilletveit    schedule 14.09.2013