TouchesBegan на Sub-ViewController не вызывается - PullRequest
1 голос
/ 25 мая 2011

У меня есть ViewController, который реагирует на некоторые события touchEvents (touchSegan, TouchMoved и т. Д.).

Я обнаружил, что когда я показываю этот контроллер с использованием presentModalViewController: он работает просто отлично, но я пытаюсь добавить его View как подпредставление другого ParentViewController, например так:

- (void)viewDidLoad
{
    [super viewDidLoad];

    //Add SubController
    controller = [[SubViewController alloc] initWithNibName:@"SubViewController" bundle:nil];
    controller.view.frame = CGRectMake(0, 30, 300, 130);
    [view addSubview:controller.view];
    [controller release];
}

Когда я делаю это, добавляется родительский вид, но он больше не реагирует на сенсорные события.Есть ли способ исправить это?

Кроме того, есть ли лучший способ сделать это?Я знаю, что, возможно, мог бы использовать подкласс View для дочернего представления, но он должен использовать Nib, и я не был уверен, как справиться с этим без использования ViewController.

Ответы [ 3 ]

2 голосов
/ 25 мая 2011

Вы правы, вы должны использовать подкласс UIView.

Самый простой способ загрузить его из пера - это включить подпредставление в пид.

  • Просто перетащите UIView в представление, подключенное к исходному контроллеру представления.

  • Затем с выбранным видом внутри перейдите к инспектору идентификации.Это тот, который выглядит как маленькая идентификационная карточка.

  • Самое первое поле называется Пользовательский класс .

  • Введите здесь имя вашего подкласса UIView .

Если вам нужна ссылка на это, просто создайте IBOutlet в вашем исходном контроллере представления и подключите его.Таким образом, вы можете устанавливать hidden = YES до тех пор, пока вам это не понадобится.

В вашем подклассе UIView вы можете захотеть переопределить

- (void)awakeFromNib Это будет вызвано при первой распаковке пера.

для настройки любых распознавателей жестов и т. Д.

1 голос
/ 25 мая 2011

Чтобы загрузить перо непосредственно в представление:

// Get the views created inside this xib
NSArray *views = [NSBundle mainBundle] loadNibNamed:@"myViewNib" owner:nil];

// There's probably only one in there, lets get it
UIView *myView = [views objectAtIndex:0];

// Do stuff . . .
[[self view] addSubview:myView];
0 голосов
/ 25 мая 2011

Вы можете попытаться вызвать becomeFirstResponder в своем подпредставлении и посмотреть, получает ли он touchesBegan ... Возможно, это так, но это также может привести к тому, что суперпредставление не получит touchesBegan, если вам потребуется ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...