При использовании подкласса 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