IPhone UIView: возможно ли включить взаимодействие с пользователем только на подпредставлениях? - PullRequest
2 голосов
/ 30 апреля 2010

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

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

Есть идеи?

Ответы [ 2 ]

1 голос
/ 10 августа 2010

Вы, кажется, путаете представления и их контроллеры: viewControllers не сложены, они просто являются частью файла nib или xib. Представления, с другой стороны, могут быть частью иерархии представлений и в этом смысле могут перекрывать друг друга. Функция viewController заключается в управлении и координации различных представлений на экране. Использование контроллера вида для управления одной кнопкой неэффективно: целью контроллера было бы облегчить связь между различными кнопками (например, отключение кнопок 1,2 и 4 при касании цифрой 3). Заявление @ bpapa о том, что использование более одного viewController не поощряется Apple, больше не является правильным. В настоящем разделе Контроллеры Windows, Views и View в Руководстве по программированию приложений iOs говорится:

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

Одна вещь, которая не прояснена в документах, но которая укусила меня несколько раз за последние недели, это то, что создание viewController целью действия UIControl только имеет эффект, если этот viewController является файлом Владелец пера. Скажем, например, что у вас есть перо с двумя viewControllers, gameViewController и scoreViewController. GameView может содержать несколько кнопок, которые играют роль игровых фигур, и при касании их отправляет сообщение действия методу gameViewController - (void) pieceHasBeenTouched: (id) отправителя. Это прекрасно работает, если gameViewController является владельцем файла.

Теперь может показаться логичным, что если у вас есть кнопка в ScoreView, чтобы позволить ей отправить сообщение для ScoreViewController, скажем, saveScore или что-то в этом роде. По причинам, которые мне пока не совсем понятны, цепочка респондентов не позволит вам. Вам нужно сделать так, чтобы кнопка «Сохранить» в представлении счета отправляла сообщение о своем действии в gameViewController.

Я решаю эту проблему, устанавливая привязки IBOutlet между двумя контроллерами - уведомления являются еще одной возможностью.

0 голосов
/ 19 ноября 2012

Добавьте это в свой код к костюму UIView: hitTest: withEvent:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    UIView *hittedView = [super hitTest:point withEvent:event];
    return hittedView == self.button ? hittedView : nil;
}

Я ссылался на это: UserInteraction разрешено только для подпредставления . Я проверил код. И это работает!

...