При использовании подкласса UIActivity клиента в iOS 6 можно указать настраиваемый контроллер представлений, который будет отображаться, когда ваше действие выбрано из начального представления UIActionViewController. Вы делаете это, возвращая ссылку на настраиваемый контроллер представлений из вашего подкласса UIActivity activityViewController
.
В соответствии с ссылкой на класс UIActivity:
activityViewController
По умолчанию этот метод возвращает
nil
. Подклассы, которые предоставляют дополнительный пользовательский интерфейс с помощью контроллера вида, могут переопределить этот метод, чтобы вернуть этот контроллер представления. Если этот метод возвращает действительный объект, система представляет для вас возвращенный контроллер представлений вместо вызова методаperformActivity
. На iPad ваш контроллер просмотра представлен внутри popover. На iPhone и iPod touch ваш контроллер просмотра представлен в формате.Ваш пользовательский контроллер представления должен предоставить представление с вашим пользовательским интерфейсом и должен обрабатывать любые пользовательские взаимодействия внутри этих представлений. По завершении действия не отключайте контроллер просмотра самостоятельно. Вместо этого вызовите метод
activityDidFinish:
и пусть система отклонит его для вас.
Обратите внимание, что бит в конце первого абзаца: На iPad ваш контроллер просмотра представлен внутри popover. На iPhone и iPod touch ваш контроллер просмотра представлен в формате.
Однако, на iPad контроллер представления, возвращаемый activityViewController
, всегда отображает модально, независимо от того, как я представляю UIActivityViewController (либо модально, либо через popover). При представлении через popover он вызывает его сбой, поскольку он не считает, что он был уволен.
Что я делаю неправильно? Это ошибка в iOS 6?
Обновление: здесь представлен простой проект Xcode, который иллюстрирует проблему. Не стесняйтесь клонировать его и поиграть, чтобы увидеть, видите ли вы, где мы ошибаемся: github.com/simonwhitaker/GSActivityDemo