В UITabbarController есть 5 элементов: VC0, VC1, VC3 (выбрано по умолчанию), VC4, VC5.
UITabbarController > NavigationController > VC1 > VC1-A
UIImagePickerController представлен в VC1-A:
let imagePickerController = UIImagePickerController()
imagePickerController.sourceType = .photoLibrary
imagePickerController.delegate = self
imagePickerController.allowsEditing = false
self.present(imagePickerController, animated: false)
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
let info = convertFromUIImagePickerControllerInfoKeyDictionary(info)
if let image = info[convertFromUIImagePickerControllerInfoKey(UIImagePickerController.InfoKey.originalImage)] as? UIImage{
topImage.image = image
}
picker.dismiss(animated: true, completion: nil)
}
Когда изображение выбрано, а средство выбора закрыто, представление перейдет к выбранному по умолчанию элементу VC3, но не к VC1-A.
Я нашел это в недавнем тесте в приложении, но я помню, что раньше он работал правильно. Теперь я не могу вспомнить, что я сделал, что может сделать это неправильным, обновление Xcode, обновление версии Swift? Я знаю, что не делаю никаких изменений в этой части.
Следующие попытки также не работают:
self.navigationController?.present(imagePickerController, animated: false)
self.navigationController?.dismiss(animated: true, completion: nil)
self.navigationController?.popViewController(animated: true)
picker.popViewController(animated: true)
К настоящему времени я заставляю это работать так:
picker.dismiss(animated: true, completion: {
self.tabBarController?.selectedIndex = 1
})
Но не стоит решать проблему, надеюсь, кто-то может дать правильное решение. Спасибо.
Вы должны получить tabBarController навигационного контроллера VC1-A и изменить выбранный индекс
picker.dismiss(animated: true) {//dismiss image picker
if let navigationController = self.navigationController {
navigationController.popToRootViewController(animated: true)//go to VC1
navigationController.tabBarController?.selectedIndex = 2//go to VC3
}
}
@jdleung попробуй self.navigationController?.tabBarController?.selectedIndex = 2
@jdleung Вы пробовали это?
На данный момент это работает: если позволить tbc = self.tabBarController{ tbc.selectedIndex = 1 }, экран теперь остается на VC3 примерно на 0,3 секунды, прежде чем перейти к VC1-A. Я ищу самый простой способ, а также хочу узнать, почему `picker.dismiss(animated: true') работало раньше?
@jdleung просто попробуй picker.dismiss(animated: true) { self.navigationController.tabBarController?.selectedIndex = 2 }
Это работает, но экран остается на VC3 некоторое время (хотя и мимолетный проблеск), прежде чем вернуться к VC1-A, есть ли какой-либо другой прямой способ просто закрыть? Я сделал неправильную презентацию? Я попытался установить переход как show detail
, он хорошо отклоняется, но не унаследовал панель навигации topViewController.
Я думал, что я как-то написал несколько плохих кодов, чтобы он не работал, нет возможности просто использовать
dismiss
? Помню раньше работало :-(