簡體   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