从子级ViewController进行排序

问题描述 投票:0回答:1

我处于将子视图控制器“ B”呈现在另一个视图控制器“ A”上的情况。视图控制器“ B”具有5个按钮,可将按钮锁定(按入)到第三个视图控制器“ C”。问题是一旦我进入视图控制器“ C”,我希望能够使用展开命令从C-> A转到中间,而B不会出现在中间。

    // view controller A class

    class AViewController: UIViewController {        

            @IBAction func goToViewControllerB(_ sender: UIButton) {
                   let viewControllerB = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "viewControllerB_ID") as! BViewController
                   self.addChild(viewControllerB)
                   viewControllerB.view.frame = self.view.frame
                   self.view.addSubview(viewControllerB.view)
                   viewControllerB.didMove(toParent: self)
           }

           @IBAction func unwindToStart(segue: UIStoryboardSegue) {
                  print("back from view controller C!")
           }

   }

   //view controller B class

   class BViewController: UIViewController {

           override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
                  if let identifier = segue.identifier {
                        switch identifier {
                              case "segueFromBToC_1":
                                    if let destVC = segue.destination as? CViewController {
                                        //pass data
                                    }
                              // ... cases 2-4
                              case "segueFromBToC_5":
                                    if let destVC = segue.destination as? CViewController {
                                        //pass data
                                    }
                              default: break
                         }                   
                  }
          }

    }

    // empty CViewController class

[我知道将以下代码放入我的视图控制器B类中,会将其从父视图控制器“ A”中删除,但由于“ B”没有,我再也无法从“ B”切换到“ C”了。不存在。

   self.view.removeFromSuperview()
   self.removeFromParent()
   self.willMove(toParent: nil)

我想知道上面的代码应该放在哪里,或者是否应该从子视图控制器中查询?我也没有使用导航控制器,因为我不知道如何使用子视图控制器来实现它们。我是否应该为5个按钮中的每个按钮设置@IBAction插座,然后在其中放置上面的代码?

swift segue viewcontroller unwind-segue removefromsuperview
1个回答
0
投票

更新:我能够通过从按钮上拆下5个推送按钮来进行修复,并使5个推送按钮中的每一个都直接从视图控制器B转到视图控制器C The 5 segues from view controller B to view controller C。然后,每个视图按钮都有一个@IBAction,在视图控制器B中有以下代码:

class BViewController: UIViewController {

       @IBAction func button1ToVC3(_ sender: UIButton) {
          segueAndRemoveSelf(segueName: "segueFromBToC_1")
      }

      @IBAction func button2ToVC3(_ sender: UIButton) {
         segueAndRemoveSelf(segueName: "segueFromBToC_2")
      }

      @IBAction func button3ToVC3(_ sender: UIButton) {
         segueAndRemoveSelf(segueName: "segueFromBToC_3")
      }

      @IBAction func button4ToVC3(_ sender: UIButton) {
         segueAndRemoveSelf(segueName: "segueFromBToC_4")
      }

      @IBAction func button5ToVC3(_ sender: UIButton) {
         segueAndRemoveSelf(segueName: "segueFromBToC_5")
      }

       override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
              if let identifier = segue.identifier {
                    switch identifier {
                          case "segueFromBToC_1":
                                if let destVC = segue.destination as? CViewController {
                                    //pass data
                                }
                          // ... cases 2-4
                          case "segueFromBToC_5":
                                if let destVC = segue.destination as? CViewController {
                                    //pass data
                                }
                          default: break
                     }                   
              }
      }

}

extension BViewController {
    func segueAndRemoveSelf(segueName: String) {
        self.performSegue(withIdentifier: segueName, sender: self)
        self.view.removeFromSuperview()
        self.removeFromParent()
        self.willMove(toParent: nil)
    }
}

虽然不确定这是否是最佳实践。

© www.soinside.com 2019 - 2024. All rights reserved.