【发布时间】:2020-11-13 11:51:36
【问题描述】:
在我的应用程序中,我使用.present(...) 在另一个视图控制器之上显示一个视图控制器(它们是相同的 VC)。当我关闭它(从屏幕下拉)时,我想在我的第一个 VC 中选择一些行。为此,我使用 UIAdaptivePresentationControllerDelegate,其中有 print(...) 和 tableView.selectRow(...) 函数。打印工作正常,但 tableView.selectRow 不起作用。可能是什么问题?
extension UIViewController {
class func loadFromStoryboard<T: UIViewController>() -> T {
let name = String(describing: T.self)
let storyboard = UIStoryboard(name: name, bundle: nil)
if let viewController = storyboard.instantiateInitialViewController() as? T {
return viewController
} else {
fatalError("Error: No initial view controller in \(name) stroryboard")
}
}
}
class MyTabBarController: UITabBarController {
let firstVC: FirstVC = FirstVC.loadFromStoryboard()
...
override func viewDidLoad() {
super.viewDidLoad()
loadViewControllers()
}
private func generateViewController(rootViewController: UIViewController, image: UIImage?, title: String) -> UIViewController {
let navigationVC = UINavigationController(rootViewController: rootViewController)
...
return navigationVC
}
private func loadViewControllers() {
viewControllers = [
generateViewController(rootViewController: firstVC, image: ..., title: "...")
]
}
...
private func openVC() {
let storyboard = UIStoryboard(name: "FirstVC", bundle: nil)
let vc = storyboard.instantiateViewController(identifier: "FirstVC") as! FirstVC
vc.presentationController?.delegate = vc
self.present(vc, animated: true, completion: nil)
}
...
}
//FirstVC
extension FirstVC: UIAdaptivePresentationControllerDelegate {
func presentationControllerDidDismiss(_ presentationController: UIPresentationController) {
print("VC was dismissed")
self.tableView.selectRow(at: IndexPath(row: 0, section: 0), animated: true, scrollPosition: .none)
}
}
在控制台中我看到“VC 已关闭”,但没有选择行。
附:我使用 Xcode 12.2 和 iOS 14.2。
tableView 是一个 IBOutlet,如果它很重要的话。
【问题讨论】: