Arhn - архитектура программирования

Наследование Segues в разработке приложений для Objective C/iOS

У меня есть пользовательский MyUITableViewController, у меня есть переход, когда пользователь выбирает одну из строк в другой ViewController, который показывает сведения об элементе в этой строке. (Я строю с помощью Storyboard и Segue Identifier, "foobar").

Я создал еще один ChildTableViewControler, который наследуется от MyUITableViewController. Поскольку элементы, отображаемые в нем, одинаковы, у меня просто другой набор элементов, я хотел бы, чтобы поведение выбранного элемента было таким же. То есть, когда пользователь выбирает одну из строк, я хочу, чтобы она выполняла тот же переход. Поэтому я бы предположил, что мне не нужно снова писать код перехода.

Однако, когда я запускаю приложение и щелкаю одну из строк в ChildTableViewController, оно говорит, что переход с идентификатором «foobar» не найден и вылетает.

Значит, в segue нет наследования? Мне нужно повторно писать код перехода?


  • Имеет ли переход, который вы создаете из ChildTableViewController, тот же идентификатор перехода foobar? 04.03.2014
  • Нет, наследования самого перехода нет. Переход уникален для конкретного экземпляра контроллера в вашей раскадровке. Однако это не означает, что вам нужно повторно писать код prepareForSegue — он должен быть унаследован. 04.03.2014
  • Я не создавал переход специально для ChildTableViewController. Я надеялся, что идентификатор перехода Foobar, который я создал для родителя, будет унаследован дочерним элементом. Очевидно нет. Итак, как мне динамически создать идентификатор перехода? Например, для ChildTableViewController я не хочу использовать раскадровку, потому что я хочу создать ее и отображать динамически по мере необходимости. 04.03.2014
  • Ваша последняя фраза не имеет смысла. Если вы не используете раскадровки, то у вас не может быть переходов — вся идея переходов состоит в том, чтобы дать вам визуальное представление перехода между контроллерами, которое вы можете увидеть в раскадровке. Если вы не используете раскадровку, вы должны просто представить или нажать свой контроллер в коде. 04.03.2014
  • Контроллер parenttableview создается с помощью раскадровки. Для дочернего контроллера представления таблицы (поскольку я планирую иметь много разных дочерних контроллеров представления таблицы, все разные наборы элементов одного типа) я не планирую иметь разные доски раскадровки для каждого из этих дочерних контроллеров представления таблицы и планировал создавать их динамически по мере необходимости. Я просто хочу, чтобы все они вели себя одинаково: нажмите на одну строку, и она перейдет к другому контроллеру itemdetailsviewcontroller. 04.03.2014

Ответы:


1

Поскольку этот вопрос остается открытым, вот ответ:

Первое, что важно отметить, это то, что переход не является свойством ViewController, если вы перейдете к классу UIViewController и выполните поиск перехода, вы найдете только методы и никакого свойства, что уже является признаком того, что он не может быть унаследован. Затем, если вы проверите интерфейс UIStoryboardSegue, вы найдете следующее:

@property (nullable, nonatomic, copy, readonly) NSString *identifier;
@property (nonatomic, readonly) __kindof UIViewController *sourceViewController;
@property (nonatomic, readonly) __kindof UIViewController *destinationViewController;

В документации UIStoryboardSegue вы найдете :

Объект UIStoryboardSegue отвечает за выполнение визуального перехода между двумя контроллерами представления. Кроме того, объекты перехода используются для подготовки к переходу от одного контроллера представления к другому. Объекты перехода содержат информацию о контроллерах представления, участвующих в переходе. Класс UIStoryboardSegue поддерживает стандартные визуальные переходы, доступные в UIKit. Вы также можете создать подкласс для определения пользовательских переходов между контроллерами представления в файле раскадровки.

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

09.02.2016
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..