Ссылка на класс, из которого было добавлено подпредставление - PullRequest
0 голосов
/ 15 августа 2011

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

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

Заранее спасибо.

С уважением,

Ed

РЕДАКТИРОВАТЬ (НЕМНОГО БОЛЬШЕ ИНФОРМАЦИИ):

Это подпредставление является представлением класса uiviewcontroller, который разработан для iPhone. Это таблица, которая загружает видео при нажатии строки. Киноплеер загружает видео в указанном контроллере представления (именно поэтому я хочу сослаться на контроллер представления iPad из подпредставления). Представление в основном используется в приложении iPad в том же виде.

Ответы [ 4 ]

2 голосов
/ 15 августа 2011

Это звучит как проблема архитектуры. Это не ваше мнение, чтобы сказать что-то, чтобы играть звук. Это работа контролера. Это зависит от вас, чтобы сказать «кому-то», что его коснулись, сдвинули или что-то еще сделал пользователь. «Кто-то» (кто смотрит) тогда выполнит правильный ответ на это.

Чтобы сделать это, ваше мнение должно вообще взять цель, а возможно и действие. Посмотрите, как UIControl (например, UIButton) сообщает другим объектам, что оно было активировано. Затем наблюдатель (контролер) реагирует соответствующим образом.

EDIT

Просмотр не должен загружать видео. Контроллер представления должен загрузить видео и установить его в правильном представлении. Единственное задание, которое выполняет представление, - сообщить контроллеру вида, что оно было нажато. UITableView обрабатывает это автоматически с помощью UITableViewDelegate метода tableView:didSelectRowAtIndexPath:. Если вы не используете UITableView, вы все равно должны следовать этой схеме. Представление принимает, имеет делегата и сообщает делегату (контроллеру), что что-то было выбрано. Затем контроллер обновляет представления новыми данными.

1 голос
/ 15 августа 2011

Вероятно, у вас уже есть основное представление, живущее в свойстве делегата приложения (оно обычно назначается через файл .xib приложения, посмотрите в методе applicationDidFinishLaunching: делегата приложения, где он добавляет основное представление в качестве подпредставления для окно, что-то вроде:

[window addSubview:primaryController.view];
[window makeKeyAndVisible];

).

Так что в любом месте вашего приложения, где вам нужен доступ к основному виду, вы можете сделать:

[(MyAppDelegateType*)([UIApplication sharedApplication].delegate).primaryController somePrimaryControllerMethod];

Редактировать: хотя это будет работать, я согласен с Робом Нейпером, что это не лучший способ сделать это с точки зрения архитектуры.

0 голосов
/ 15 августа 2011

Разве вы не можете просто добавить свойство к представлению следующим образом:

@property (nonatomic, assign) UIViewController *parentViewController;

И при инициализации представления (из UIViewController) установить свойство:

UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 460.0f)];
customView.parentViewController = self;

И с этого момента вы сможете вызывать parentViewController из представления.

Редактировать: У Роба Нейпера есть хорошая точка зрения, вероятно, лучше установить цель иселектор из вида вместо контроллера вида.Таким образом, вы должны иметь возможность напрямую связывать методы с представлением.Свойства выглядят так:

@property (nonatomic assign) id target;
@property (nonatmic, assign) SEL selector;

И, возможно, добавьте в ваш вид назначенный инициализатор:

- (id)initWithFrame:(CGRect)aFrame target:(id)aTarget selector:(SEL)aSelector
{
   self = [super initWithFrame:aFrame];
   if (self)
   {
      self.target = aTarget;
      self.selector = aSelector;
   }
   return self;
}
0 голосов
/ 15 августа 2011

Вы можете просто использовать [yourSubview superview], чтобы получить суперпредставление.

...