Какао: NSButton исчезает после нажатия. Все еще активен однако - PullRequest
3 голосов
/ 11 марта 2012

Я пишу простой проект в задаче C с использованием XCode 4.1, нацеленный на MacOS (не мобильный), и столкнулся со следующей проблемой:

Одна из моих кнопок (NSButton, расположенная сверху на складе)NSView), будет периодически исчезать после нажатия.Он больше не рисуется, а фон отображается на его месте.Это не предполагаемое поведение, и происходит только время от времени (возможно, один из двадцати кликов).Особенно странным является то, что кнопка все еще активна - пользователь может щелкнуть пространство, где должна отображаться кнопка, и будет выполнено правильное действие, и кнопка будет снова нарисована.Изменение размера окна также приводит к повторному рисованию кнопки.

Я попытался исправить следующие ошибки, ни одно из которых не сработало:

  1. Добавить вызов SetNeedsDisplay в конец щелчкаprocessing.
  2. Добавить вызов SetNeedsDisplay в несвязанный цикл анимации.Это был неудачный выбор, он вызывал мерцание кнопки и в конечном итоге приводил к сбою при использовании кнопки.С некоторой синхронизацией это может быть взломано для обхода, но не решает проблему с корнем.

Есть какие-нибудь идеи о том, что происходит, и как я могу решить это?Спасибо!

edit: до сих пор не совсем понимаю, почему это происходит, но я нашел обходной путь: создание дублирующейся кнопки непосредственно под исчезающей кнопкой.Даже если он не нарисован, клики направляются на верхнюю кнопку.Kludge, конечно, но эффективно.

1 Ответ

3 голосов
/ 12 марта 2012

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

Необходимо убедиться, что кнопка является дочерней по отношению к представлению, перед которым она находится.В коде это можно сделать, вызвав [parentView addSubView:yourButton], а в конструкторе интерфейсов необходимо убедиться, что вы перетаскиваете кнопку внутри содержащего представления, а не рядом с ним.

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