繁体   English   中英

当我使用 UIAdaptivePresentationControllerDelegate (Swift 5) 时,tableView.selectRow(...) 不起作用

[英]tableView.selectRow(...) doesn't work when I use UIAdaptivePresentationControllerDelegate (Swift 5)

在我的应用程序中,我使用.present(...)在另一个视图之上显示一个视图 Controller(这些是相同的 VC)。 当我关闭它(从屏幕上下拉)时,我想在我的第一个 VC 中输入 select 某行。 为此,我使用 UIAdaptivePresentationControllerDelegate,其中我有print(...)tableView.selectRow(...) function。打印工作正常,但 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 被解雇”,但行不是 select。

PS 我使用 Xcode 12.2 和 iOS 14.2。 tableView是一个 IBOutlet,如果它很重要的话。

你应该设置:

vc.presentationController?.delegate = self

代替:

vc.presentationController?.delegate = vc

因为你一解雇 vc 就失去了委托。 你应该在你展示 FirstVC 的地方听到对 FirstVC 的解雇。

如果你只是想念它也没关系。 但如果你不明白为什么我可以分享更多细节:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM