Как сделать всплывающее окно через раскадровку (xib?) И программно Xamarin.iOS

По какой-то причине я хочу знать, как именно я могу реализовать Popup в Xamarin.iOS с помощью раскадровки и программно.


На данный момент я делаю довольно простой обходной путь:

Внутри конструктора я добавляю дополнительное представление (в виде всплывающего окна) и настраиваю таким образом
MyPopupView.Hidden = true;

После некоторых шагов (nvm) я показываю это всплывающее окно через

MyPopupView.Hidden = false;

И результат таков:
введите здесь описание изображения

Да, это плохой и очень плохой подход, потому что, что, если нужны эти 5 парней или больше?
Я не смогу спроектировать свой ViewController, потому что он быть набитым этими представлениями.
Кроме того, по какой-то причине я хочу показать стрелку(см. изображение ниже) и тень(вне всплывающего окна) для удобства использования.


Именно это я и хочу сделать:
введите здесь описание изображения

или этот (но внутри я хочу поместить, например, свой xib или VC, где я могу добавить некоторые другие виды, например анимацию .gif):
введите здесь описание изображения

или этот:
введите здесь описание изображения

и, наконец, то, что я хочу (это потрясающе):
введите здесь описание изображения


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

Я думаю, что это можно сделать с помощью UIAlertController , просто нужно вставить наш View , но не знаю, правильный ли это подход.

Спасибо за любой совет.


person XTL    schedule 04.04.2017    source источник


Ответы (1)


Последние два изображения, которые вы разместили, можно сделать с помощью раскадровки.

По сути, вам нужно создать отдельный контроллер сцены/представления в вашей раскадровке и установить для его свойства представления значение "в текущем контексте". введите здесь описание изображения введите здесь описание изображения

В качестве альтернативы вы можете установить переход на «Показать модально», а свойство представления перехода на «по текущему контексту» в Xcode.

введите здесь описание изображения

(по какой-то причине параметр «По текущему контексту» не появляется в Xamarin Studio (по крайней мере, не в Xamarin Studio 6), и когда вы открываете его в XS, он отображает сообщение «Ошибка при создании этой записи» на свойство презентации, но оно все равно должно работать).

Следующим шагом является установка прозрачности корневого представления (цвет фона = четкий цвет), а затем создание дочернего представления с вашим содержимым.

введите здесь описание изображения

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

введите здесь описание изображения

введите здесь описание изображения

И вот результат...

введите здесь описание изображения

person Jack    schedule 04.04.2017
comment
Спасибо за быстрый ответ. я пытался сделать что-то вроде этого. Я сделал еще один VC с размером 320height - 320width, и после этого я делал так: YourController yourController = new YourController(); yourController.ModalPresentationStyle = UIModalPresentationStyle.FormSheet; this.PresentViewController(yourController, true, null); и не повезло. Он растянут на весь экран. Что касается вашей презентации, хм... не слышал, но кажется, что youtu.be/CXvOS6hYADc?t =379 эта функция также не поддерживается XS. - person XTL; 04.04.2017
comment
Свойство презентации на контроллере представления действительно появляется в XS, свойство на переходе не отображается в XS, но, похоже, работает, если вы устанавливаете его с помощью xcode (вы можете щелкнуть правой кнопкой мыши на раскадровке и выбрать «Открыть с помощью xcode»). - person Jack; 04.04.2017
comment
Что касается размера, я бы установил его на freeform, а затем установил цвет фона корневого представления на чистый цвет (прозрачный), а затем получил дочернее представление, которое контейнер для всего содержимого, которое вы хотите отображать во всплывающем окне (вы можете ограничить это дочернее представление центром контроллера) - person Jack; 04.04.2017
comment
кажется, что ты прав. Я сделал это в XCode, и он отображается на XS i.stack.imgur.com/g3uVB. png , но я не могу их изменить :|, только настроить и все :(. Хороший ли это подход, чтобы иметь миллиард просмотров внутри Viewcontrollers? Я сделал произвольную форму, а также изменил фон моего маленького VC. Хорошо, но без containerview это можно сделать? - person XTL; 04.04.2017
comment
Не знаете, что вы имеете в виду под их изменением? Это отдельный контроллер представления, и вы можете установить любые свойства (либо в вашем методе PrepareForSegue, либо после создания экземпляра вашего VC из вашей раскадровки), которые вы хотите, и управлять им в этом VC. - person Jack; 04.04.2017
comment
кажется недоразумением с моей стороны. Можете ли вы привести пример, пожалуйста? - person XTL; 05.04.2017
comment
Не могли бы вы уточнить, с какой частью у вас возникли проблемы? Я постараюсь добавить пример и более подробные инструкции позже сегодня. - person Jack; 05.04.2017
comment
эту часть с вашей раскадровкой и установите ее свойство презентации на самом переходе в Xcode. Хорошо спасибо! - person XTL; 05.04.2017
comment
Извините, я не думаю, что у меня будет шанс обновить свой ответ сегодня (попробую завтра). - person Jack; 06.04.2017
comment
Я добавил пошаговые снимки экрана, которые, надеюсь, будут вам полезны. - person Jack; 06.04.2017
comment
спасибо за отличные скриншоты. Я понятия не имею, но это не работает в XS (я делаю шаг за шагом), также почти такая же работа в Xcode (родной стиль), работает как исключение... Какого черта :( ? - person XTL; 06.04.2017
comment
Давайте продолжим обсуждение в чате. - person Jack; 06.04.2017