Intereting Posts
Открытие tel: ссылки из UIWebView Как установить UIButton как выбранные, так и отключенные Как условно перейти на следующую страницу в pageViewController? Как переопределить метод экземпляра из расширения протокола в Swift? didSelectItemAtIndexPath / didDeselectItemAtIndexPath в PSTCollectionView в iOS Будет ли добавлен новый шаблон запроса выборки для Core Data, перерыв предыдущих версий модели? Файл не может быть открыт, версия слишком старая Начиная с последнего обновления Xcode я не могу работать с изображениями iOS воспроизводит много аудиофайлов ТОЧНО в то же время Извлечь отдельные данные из данных Core вместе с убывающим порядком? Сохранить файл изображения в каталоге temp SIGABRT обращается к NSArray с помощью indexPath.row Xcode 8: включение возможности беспроводной связи для идентификатора приложения Wildcard ios хранения данных и веб-сервис лучших методов? Применение UIVibrancyEffect к UILabel в UITableViewCell

Использовать разные 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 в своем раскадровке, используя один и тот же контроллер и имея разные прототипы, указывайте на каждый из них таким образом, что у вас очень мало кодирования, чтобы вы просто выбрали подходящую ячейку прототипа для каждой строки.