Запретить закрытие модального окна WKInterfaceController

Есть ли способ запретить пользователю закрывать модальный контроллер?

Я думаю, что довольно часто хочется «заблокировать» основной интерфейс приложения Watch, прося пользователя открыть аналог iPhone или выполнить там какое-то действие.

Мое текущее решение состоит в том, чтобы снова представить контроллер, когда он будет отклонен, но он неуклюж.


person Rivera    schedule 18.03.2016    source источник


Ответы (3)


Вы не можете предотвратить закрытие контроллера модального интерфейса, так как система автоматически закрывает его при нажатии на заголовок.

Поскольку ваш код не спрашивает, должно ли это произойти, а только знает, что это происходит, нет никакого способа перехватить или отменить это действие. Об этом кратко говорится в документации WKInterfaceController.

Когда пользователь касается строки заголовка, WatchKit автоматически закрывает модальный интерфейс, не предпринимая никаких дальнейших действий.

Что вы можете сделать?

Хотя вы не знаете, когда Нажмите «Отменить заголовок», есть хак, который «скрывает» заголовок «Отменить».

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

Что рекомендует HIG?

Обход рекомендаций по пользовательскому интерфейсу, скорее всего, приведет к ухудшению весь пользовательский опыт.

Верхний левый угол модального листа зарезервирован для кнопки «Закрыть», которая закрывает интерфейс.

Некоторые пользователи могут быть разочарованы или раздражены, если

  • нет очевидного способа отменить или

  • модальное окно появляется снова после того, как его неоднократно отменяли.

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

person Community    schedule 18.03.2016
comment
Что меня очень раздражает, так это то, что Apple выставляет напоказ свои собственные рекомендации в нескольких встроенных приложениях: * В приложении Alarm Add Alarm выводит на полноэкранный интерфейс с кнопкой Cancel в левом нижнем углу вместо строки заголовка (которая полностью скрыт). * Приложение Messages делает что-то подобное в меню New Message, которое открывает модальное окно, в котором строка заголовка не активна, а вместо этого внизу слева находится кнопка Cancel. Но, насколько я понимаю, мое приложение не может вести себя так же. - person Ryan; 28.07.2017
comment
В моем случае приложение записывает данные с датчиков, и абсолютно важно знать, когда пользователь нажимает кнопку «Назад», поскольку приложению необходимо остановить запись. В противном случае, если пользователь несколько раз перемещается к контроллеру туда и обратно, может случиться так, что будет выделено несколько рекордеров, которые невозможно остановить. Это может привести к тому, что приложение будет использовать всю свою память. - person Ramy Al Zuhouri; 03.11.2017

Есть несколько неуклюжий способ обойти эту проблему, используя reloadRootControllers. Когда вы вызываете reloadRootControllers(withNamesAndContexts:) с именем WKInterfaceController, которое вы назвали в своей раскадровке, это имеет эффект, аналогичный модальному представлению этого контроллера. Однако, поскольку теперь он является корневым контроллером, у него нет кнопки отмены. Мне это не очень нравится, но с работой справляется.

Обратите внимание, что этот метод устарел, начиная с watchOS 4. Документация Apple по reloadRootControllers(withNamesAndContexts:)< /а>

person Ben Lachman    schedule 04.10.2018
comment
Я думаю, что это может быть правильным способом избежать модальных окон вместе. Если кому-то не нужна анимация и фактическая модальная функциональность, они, вероятно, не хотят, чтобы модальное начало было с самого начала. Я бы добавил, что это хороший способ перейти на другой набор страниц, соединив их в раскадровке и передав идентификаторы в массиве имен. (Спасибо, Бен) - person migs647; 16.10.2018

Хитрость заключается в том, чтобы сделать модальный экран полноэкранным и изменить верхнее значение вставки для вашей основной группы.

введите здесь описание изображения Предварительный просмотр модального представления

person Hackman    schedule 18.01.2021