UIActivityViewController показывает пустые параметры и не может взаимодействовать - PullRequest
0 голосов
/ 18 апреля 2019

Я реализовывал новую функцию с помощью кнопки «Поделиться» в моем приложении. Обратите внимание, что ActivityViewController оказался пустым. Сначала я подумал, что элемент, который я поделился, может быть пустым, но когда я попытался поделиться простой строкой, она все равно показывается вот так, я снова пересмотрел свой старый рабочий код, и все они действуют так. Даже что-то простое:

let activityViewController = UIActivityViewController(activityItems: ["test"], applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view
DispatchQueue.main.async {
    self.present(activityViewController, animated: true, completion: nil)
}

вот что я получил: iphone X simulator nav screenshot Кто-нибудь есть идеи, что вызывает это и как это исправить?

РЕДАКТИРОВАТЬ: протестировано с использованием актуального устройства, вызывает проблемы, в моем выпущенном приложении, обратная связь заключается в том, что он не отображается пустым, он показывает с параметрами, просто не взаимодействует, не может быть нажата и не может отклонить его приложение просто «зависнет», а затем пользователю придется убить приложение, чтобы использовать его повторно. После тестирования я все еще не уверен, что вызывает пробел, я отключил все свое расширение UIViewController (многие из них не автоматизированы и в любом случае нуждаются в вызове функций, поэтому я не думаю, что они являются проблемой), и когда я помещаю debugPrint в блок завершения текущей функции, он даже не вызывается, поэтому контроллер представления активности не завершает инициализацию?

1 Ответ

0 голосов
/ 22 апреля 2019

Хорошо, наконец-то нашел виновника, кто-то подсказал мне, что я должен посмотреть в расширение UIViewController, чтобы проверить, переопределяю ли я что-то, ну, я не сделал этого, но я переопределил UakeLabel и UIButton UILFelNib и setNeedsDisplay из UIButton, потому что мое приложение имеетподдержка нескольких языков и In-App меняют поддержку языка, и я хотел «автоматизировать» UILabel и UIButton для изменения шрифта языка (потому что какой-то шрифт выглядит лучше), чтобы я мог избежать присоединения слушателя к контроллерам представления для изменения шрифта языка, когда ониязык приложения меняется.

override open func awakeFromNib() {
    super.awakeFromNib()
    if let prefLang = UserDefaults.languageCode{
        self.font = switchFontForLang(lang: prefLang)
    }
}

override open func setNeedsDisplay() {
    super.setNeedsDisplay()
    if let prefLang = UserDefaults.languageCode{
        self.font = switchFontForLang(lang: prefLang)
    }
}

В частности, setNeedsDisplay () вызывает проблему, я поместил в них отладочное сообщение, и я обнаружил, что он вызывается бесконечно, я думаю, потому что "в приложении"изменение шрифта языка пытается изменить язык на настройку, но UIActivityViewController каким-то образом пытается вернуть шрифт обратно или, по крайней мере, вызвать setNeedsDisplay (), когда обнаруживает, что что-то не так, что он вызывает в ove.метод и затем он обнаружит его снова, создавая цикл бесконечного вызова setNeedsDisplay ().

...