presentModalViewController для Родителя из UITableView внутри UIViewController - PullRequest
0 голосов
/ 23 марта 2011

Возможно, это что-то простое, но я все еще изучаю все подробности по этому вопросу, но я исчерпал поиски этого, но ответа нет.

У меня есть UIViewController с несколькими элементами, отображаемыми на нем, одним из таких элементов является UITableView. UITableView имеет свой собственный класс и размещается в UIViewControllers viewWillAppear

- (void)viewWillAppear:(BOOL)animated
{
    UITableView *insideTableView = [[UITableView alloc] init];
    tableView.delegate = insideTableView;
    tableView.dataSource = insideTableView;
}

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

Внутри моего класса TableView у меня есть следующее:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Cell Pressed, Present View");
    PopupView *popupView = [[PopupView alloc] initWithNibName:@"PopupView" bundle:nil];
    popupView.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentModalViewController:popupView animated:YES];
}

Теперь он вызывается нормально, проверено NSLog, однако представление не отображается. Я знаю, что проблема связана с тем, что я хочу, чтобы PopUp отображался над родительским элементом TableViews, а не над собой.

Я просто не уверен, как правильно назвать его в этом случае.

1 Ответ

1 голос
/ 23 марта 2011

Делегатом является UIViewController, для которого не установлено свойство view, поэтому presentModalViewController:: не работает.

Вам необходим контроллер представления, содержащий представление таблицы, для представления контроллеров модального представления, но обратите внимание, что этот контроллер представления не является родительским для делегата представления таблицы.Это потому, что у вас нет иерархии контроллера представления.

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

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

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

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