Как подключить выход dataSource контроллера просмотра страницы с помощью раскадровки в Interface Builder

Согласно документации Apple, здесь, мы должны иметь возможность добавить контроллер просмотра страницы в раскадровку, а затем, при желании, установить источник данных, подключив выходы.

Создание интерфейса контроллера просмотра страницы с помощью раскадровки

Шаблон Xcode страничного приложения создает новый проект с контроллером представления страницы в качестве начальной сцены.

Чтобы добавить контроллер представления страницы к существующей раскадровке, сделайте следующее:

  1. Перетащите контроллер просмотра страницы из библиотеки. Добавьте сцену контроллера просмотра страницы в свою раскадровку.
  2. В инспекторе атрибутов настройте соответствующие параметры.
  3. При желании установите делегата, источник данных или и то, и другое, подключив соответствующие выходы.
  4. Отобразите его как первый контроллер представления, выбрав параметр Is Initial View Controller в инспекторе атрибутов (или представьте контроллер представления в пользовательском интерфейсе другим способом).

Затем я определил подкласс UIPageViewController следующим образом

@interface DetailsPageViewController : UIPageViewController <UIPageViewControllerDataSource>

но затем, когда я попытался подключить выход источника данных, он не выделяет контроллер и не позволяет его подключить. Я также пробовал реализовать UIPageViewControllerDataSource на других контроллерах, но у меня та же проблема, что я не могу подключить розетку.

Кто-нибудь может помочь?


person Terrence Tan    schedule 01.11.2012    source источник


Ответы (2)


Обратите внимание, что в документации Apple указано, что UIPageViewController обычно не подклассифицируется. Ваш UIPageViewControllerDataSource не обязательно должен быть подклассом View Controller. Вы можете сделать его подклассом NSObject.

Обычно в схеме документа, который появляется слева от раскадровки, перечисляются только те вещи, которые появляются в раскадровке, а именно элементы пользовательского интерфейса (при условии, что она не была скрыта). Если вашего делегата / источника данных еще нет, вы можете поместить его туда, перетащив «Объект» (желтый куб) в структуру документа в соответствующей сцене.

Затем щелкните только что добавленный объект и с помощью панели Identity Inspector измените его конкретный класс на класс источника данных. Затем его можно использовать в качестве цели соединения обычным способом, перетащив на него линию из инспектора соединений.

person JulianSymes    schedule 14.03.2014
comment
Вы действительно пробовали UIPageViewController. Если у вас есть и вы знаете ответ на мой вопрос, просьба конкретно указать, как вы это сделали в контексте моего вопроса. - person Terrence Tan; 03.04.2014
comment
@TerrenceTan Да, есть. Вы пробовали мое решение? - person JulianSymes; 04.04.2014
comment
Я отредактировал свой ответ. Надеюсь, это внесет большую ясность. - person JulianSymes; 04.04.2014
comment
Спасибо за отредактированный ответ. Теперь я могу следить за ним, добавляя «Объект». - person Terrence Tan; 23.08.2014
comment
В документации Apple по UIPageViewController теперь говорится: < i> Этот класс обычно используется как есть, но может быть подклассом в iOS 6 и более поздних версиях. - person Pang; 14.05.2015

Мне не удалось найти способ сделать это в IB. Вместо этого необходимо использовать следующее:

self.delegate=self;
self.dataSource=self;
person Weel    schedule 05.01.2013
comment
Я использовал ваш ответ, но также должен установить контроллер начального представления через setViewControllers: класса UIPageViewController, чтобы он отображался правильно. - person haxpor; 06.02.2015
comment
Я вижу то же самое в xcode 7.3. В любом случае, не пытайтесь заставить IB разрешить вам соединение. Не совсем понимаю другой ответ, так как все уже есть в раскадровке, IB просто не позволяет мне устанавливать связи. - person John Fowler; 30.03.2016