2012-01-08 4 views
0

Я внедрил MGSplitViewController, где у меня есть 6 строк в masterviewcontroller, и каждый из них загружает новый UIViewController в контроллер detailviewcontroller - я следовал примеру проекта Apple, используя несколько контроллеров подробного представления. Но у меня есть пара странных проблем.MGSplitViewController с несколькими контроллерами подробного представления

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

Ну, почти, теперь, когда новый контроллер detailview фактически загружает, иногда взгляды становятся наложенными. Например, если я сначала выберу элемент управления detailview с представлением таблицы, а затем выберите тот, у которого есть только несколько кнопок, - кнопки отображаются наложением вида tableview. Если кто-то может понять, что я делаю неправильно, пожалуйста, дайте мне знать. Вот мой метод selectrow.

- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    /* 
    Create and configure a new detail view controller appropriate for the selection. 
    */ 

    switch (indexPath.row) { 
     case 1: 
     { 
      self.splitViewController.detailViewController = self.postViewController; 
//   popover = [[UIPopoverController alloc] initWithContentViewController:self.postViewController]; 
//   [popover presentPopoverFromRect:CGRectMake(200, 0, 100, 100) 
//          inView:self.splitViewController.view 
//     permittedArrowDirections:UIPopoverArrowDirectionAny 
//         animated:YES]; 
      break; 
     } 
     case 2: 
      self.splitViewController.detailViewController = self.latestViewController; 
      break; 
     case 3: 
      self.splitViewController.detailViewController = self.categoriesViewController; 
      break; 
     case 4: 
      self.splitViewController.detailViewController = self.messagesViewController; 
      break; 
     case 5: 
      self.splitViewController.detailViewController = self.searchViewController; 
      break; 
     case 6: 
      self.splitViewController.detailViewController = self.accountViewController; 
      break; 
     default: 
      break; 
    } 
} 
+0

Я полагаю, вы не используете ARC с вашим приложением. Вы не хотите удалять предыдущий detailViewController из супервизора перед назначением нового? Каковы ваши свойства всех элементов detailViewControllers? –

+0

Извините, я использую ARC. Как я могу их удалить? Я попытался установить их в ноль, но получить ошибку компилятора. Все элементы detailViewControllers являются UINavigationControllers, которые (неатомные, сильные). – xizor

+1

Нет, с ARC вам не нужно их выпускать, но перед назначением нового подробного представления вы можете попробовать что-то вроде 'if (self.splitViewController.detailViewController) [self.splitViewController.detailViewController.view removeFromSuperview];' –

ответ

2

Там, кажется, ошибка в MGSplitViewController, где он не удаляет вид предыдущего detailViewController в. Чтобы решить эту проблему, добавьте следующую строку над оператором коммутатора:

[self.splitViewController.detailViewController.view removeFromSuperview] 
Смежные вопросы