Мне часто нужен специальный модальный диалог, который не заполняет весь экран, например лист действий, который поставляется с SDK iOS. Это диалоговое окно должно обрабатывать некоторые сложные сценарии и условия, например, вращение интерфейса, а также часто содержит много кода для обработки пользовательских вариантов. Поэтому представляется весьма желательным построить диалог как комбинацию обычного вида + контроллера и заставить его работать как первоклассный гражданин в пользовательском интерфейсе.Как создать пользовательские модальные диалоги в качестве обычных контроллеров?
В этом отношении системный интерфейсный контроллер API (presentModalViewController:animated:
) весьма ограничен, например, он настаивает на том, чтобы спрятать контроллер под модальным и заставить вас использовать предопределенные анимации с небольшим контролем над ними.
API-интерфейс сдерживания контроллера выглядит довольно многообещающим, так как он позволяет одновременно просматривать несколько видов на экране, каждый из которых управляется другим контроллером. (Это как раз ситуация с модальным диалогом на регуляторе регулярного представления.) Но взаимодействие со стандартными контейнерными контроллерами (например, UINavigationController
) является скалистым, as I have found out.
Есть ли у кого-нибудь техническая работа, которая позволила бы поддерживать не-полноэкранные модальные диалоги в качестве обычных контроллеров вида и заставить их хорошо играть с остальной частью пользовательского интерфейса?
Недостатком является то, что такой контроллер не является частью иерархии контроллера и, следовательно, не принимает вызовы вращения и внешнего вида? Именно этого я и стараюсь избегать, я бы хотел, чтобы модальный диалог был регулярной частью пользовательского интерфейса, так же, как это было бы при представлении с помощью 'presentModalViewController: animated:'. – zoul
Zould, если вы хотите, чтобы он вращался вместе с родительским контроллером просмотра, нет никаких проблем, он будет делать это автоматически. Если вы все же хотите, чтобы он вел себя по-другому, чем его родительский контроллер представлений, вам нужно будет реализовать метод willRotate самостоятельно и вызвать его из метода делегирования родительского представления. –
Вот и все, что я хочу, чтобы иметь возможность полностью обмениваться контентом и вообще делать какие-то сумасшедшие вещи, которые вы можете делать в обычном контроллере. Ручная ретрансляция всей информации и обратных вызовов из родительского контроллера представления отстой - вот почему я пытаюсь найти какое-то «системное» решение. API сдерживания * очень * близко, если бы не проблемы с 'UINavigationController'. – zoul