Использовать разные xib-файлы в master / detail tableView, выбранном iOS

Я разрабатываю приложение, которое не нужно изменять только изображение или ярлык, когда выбран другой элемент tableView из главного окна (только с помощью одного элемента detailViewController), но для изменения внешнего вида (другого xib-файла для каждого элемента), поэтому все обучающие программы, найденные здесь, Полезно.

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

ОБНОВИТЬ:

Мне удалось решить эту проблему. Шаблон Master-Detail с раскадровкой создает массив вашего MasterViewController и DetailViewController в этом порядке, поэтому, если вы хотите изменить подробное представление, вам необходимо обновить этот массив из метода MasterViewController в MasterViewController следующим образом:

 switch (indexPath.row) { case 0: { NSArray *newVCs = [NSArray arrayWithObjects: [self.splitViewController.viewControllers objectAtIndex:0], viewArray[0], nil]; self.splitViewController.viewControllers = newVCs; break; } case 1: { NSArray *newVCs = [NSArray arrayWithObjects:[self.splitViewController.viewControllers objectAtIndex:0], viewArray[1], nil]; self.splitViewController.viewControllers = newVCs; break; } //etc default: break; 

Также я создал массив представлений:

 FirstDetailViewController *DVCA = [[FirstDetailViewController alloc] initWithNibName:@"FirstDetailViewController" bundle:[NSBundle mainBundle]]; SecondDetailViewController *DVCB = [[SecondDetailViewController alloc] initWithNibName:@"SecondDetailViewController" bundle:[NSBundle mainBundle]]; //etc //Create Array of views viewArray = [NSArray arrayWithObjects:DVCA, DVCB, nil]; 

ОБНОВЛЕНИЕ 2

Существует еще один способ переключить подробный вид на другой вид. В своем раскадровке вы можете добавить новый контроллер просмотра и установить Storyboard ID из Identity Inspector, чтобы он был назван вашим viewControllerClass, segue необходимо установить для замены, а его Identifier должен быть таким же, как ваш viewControllerClass. После этого didSelectRowAtIndexPath должен выглядеть следующим образом:

 NSMutableArray* arr = [[NSMutableArray alloc] initWithArray:self.splitViewController.viewControllers]; switch (indexPath.row) { case 1: { FirstDetailViewController *loginVC = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstDetailViewController"]; [arr replaceObjectAtIndex:1 withObject:loginVC]; self.splitViewController.viewControllers = arr; break; } //etc... default: break; } 

Ищите метод didSelectRowAtIndexPath в контроллере Master View. Он вызывается, когда вы нажимаете на ячейку таблицы. Вам присваивается указатель indexPath. Вы можете связать это с вашим источником данных и сообщить ему, какой ViewController следует создавать и нажимать.

Что-то вроде –

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { DetailViewController *detailViewController; switch (indexPath.row) { case 0: detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController1.xib" bundle:[NSBundle mainBundle]]; break; case 1: detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController2.xib" bundle:[NSBundle mainBundle]]; break; case 2: detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController3.xib" bundle:[NSBundle mainBundle]]; break; //etc default: break; } [self.navigationController pushViewController:detailViewController animated:YES]; } 

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