#c# #unity3d
#c# #unity3d
Вопрос:
Я создал, scrollview
который содержит кнопки TextFields
и переключатели.
Когда я прокручиваю представление, содержащее текстовое поле, оно фокусируется, как только я прикладываю палец к экрану ( EventType = MouseDown
), что является ужасным UX, поскольку вы не хотите, чтобы это происходило при прокрутке вниз / вверх.
Есть ли возможность сосредоточиться TextFields
только при MouseUp
запуске события, а не раньше?
Комментарии:
1. Какой графический интерфейс вы используете? Ваше собственное? По умолчанию Unity? NGUI? Что-то еще?
2. Это значение по умолчанию в Unity ( docs.unity3d.com/ScriptReference/GUI.TextField.html )
Ответ №1:
Я не уверен, что полностью понимаю, в чем ваша проблема, потому что я могу использовать вид прокрутки без фокусировки на соседнем текстовом поле. Однако вы можете манипулировать событием прямо перед текстовым полем. С помощью следующего кода текстовое поле получит фокус на MouseUp
, независимо от того, где вы начали MouseDown
…
void OnGUI()
{
var typeBackup = Event.current.type;
switch (Event.current.type)
{
case EventType.MouseDown:
Debug.Log(Event.current);
Event.current.type = EventType.Ignore;
break;
case EventType.MouseUp:
Debug.Log(Event.current);
Event.current.type = EventType.MouseDown;
break;
}
GUILayout.TextField("I will not steal focus on MouseDown");
if (Event.current.type != EventType.Used)
Event.current.type = typeBackup;
}
В зависимости от остальной части вашего OnGUI()
метода вам может потребоваться сохранить исходный тип события и восстановить его после текстового поля. Если MouseDown
событие после текстового поля не имеет значения, было бы безопасно опустить эту часть.
Вы могли бы точно настроить поведение, сопоставив позиции MouseDown
и MouseUp
событий, чтобы текстовое поле получало фокус только в том случае, если оба события были над ним.