Почему UINavigationBar крадет сенсорные события? - PullRequest
17 голосов
/ 31 января 2012

У меня есть пользовательская кнопка UIB с добавленной UILabel в качестве подпредставления.Кнопка выполняет данный селектор только когда я касаюсь его примерно на 15 пунктов ниже верхней границы.И когда я нажимаю на эту область, ничего не происходит.

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

ОБНОВЛЕНИЕ Я забыл сказать, что кнопка, расположенная под панелью UINavigationBar и 1/3 верхней части кнопки, не получает сенсорных событий.

Изображение было здесь

Вид с 4 кнопками находится под панелью навигации.А когда коснитесь «Баскетбола» вверху, BackButton получит событие касания, а когда коснитесь «Piano» вверху, тогда rightBarButton (если существует) получит прикосновение.Если не существует, ничего не случилось.

Я не нашел этой документированной функции в документации по приложениям.

Также я нашел эту тему, связанную с моей проблемой, но ответа тоже нет.

Ответы [ 12 ]

0 голосов
/ 31 января 2012

Ваши ярлыки огромны. Они начинаются с {0,0} (левый верхний угол кнопки), распространяются на всю ширину кнопки и имеют высоту всего вида. Проверьте данные frame и попробуйте снова.

Кроме того, вы можете использовать свойство UIButton titleLabel. Возможно, вы устанавливаете заголовок позже, и он входит в этот ярлык, а не в ваш собственный UILabel. Это объяснило бы, почему текст (принадлежащий кнопке) будет работать, в то время как метка будет покрывать остальную часть кнопки (не позволяя касаниям проходить).

titleLabel - это свойство только для чтения, но вы можете настроить его так же, как свою собственную метку (за исключением, возможно, frame), включая цвет текста, шрифт, тень и т. Д.

0 голосов
/ 31 января 2012

Есть две вещи, которые могут вызывать проблемы.

  1. Вы пробовали setUserInteractionEnabled:NO для метки.

  2. Второе, что я думаю, может сработать, кроме того, что после добавления ярлыка в верхней части кнопки вы можете отправить ярлык назад (он может работать, хотя и не уверен)

    [button sendSubviewToBack:label];

Пожалуйста, дайте мне знать, если код работает :)

...