iOS中弹出窗口的同一视图控制器中的新视图控制器或新视图

时间:2017-09-08 11:23:37

标签: ios popup

我参与了其他开发人员完成的一些项目,我必须处理一些修改。我有机会通过他们创造的弹出窗口。在这里,我说的是使用UILabel,UIButtons,UITextFields等自定义弹出窗口,而不是UIAlertViewControllers或Action Sheets。

许多开发人员(他们都是我的老手)都使用过这种方法 在同一个视图控制器中添加一个视觉效果视图,并在其上添加一个应该显示为弹出窗口的视图。在运行时,它们根据需要隐藏和显示视图。在这里,您不会为您的应用添加更多权重,但是当您尝试使用约束编辑UI时会让您头疼。

有些开发人员使用了第三方库,例如' MZFormSheetController',您可以在其中创建一个单独的视图控制器并将其用作弹出视图。在这里,您可以根据需要添加/编辑UI控件及其约束。但是,将视图控制器添加到故事板的次数越多,就越会增加故事板/应用程序的大小。

我想知道你的意见,弹出窗口的最佳做法是什么? (隐藏并在同一视图控制器中显示视图或添加新的viewcontroller)

2 个答案:

答案 0 :(得分:2)

如果要在整个应用程序中创建自定义弹出窗口,可以使用自定义设计创建单独的视图或视图控制器,该设计器将根据设置值和约束调整视图。

您可以在任何控制器上显示该视图控制器(如果已经打开模型,您可能无法呈现某些时间)

IMO,更好的选择是你可以创建一个单独的窗口来显示弹出窗口。

可以从任何地方访问的Write Show和Hide方法,  当需要隐藏时需要显示和删除该窗口时添加新窗口。

或者,您可以使用现成的库以及“ MMPopupView ”等所有控件

答案 1 :(得分:1)

当您单击按钮时,您可以在viewController 1中执行类似的操作:

   let ShareVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ShareVC") as! ShareVC
   ShareVC.image = returnFinalImage()
   self.addChildViewController(ShareVC)
   ShareVC.view.frame = self.view.frame
   self.view.addSubview(ShareVC.view)
   ShareVC.didMove(toParentViewController: self)

然后只需在viewDidLoad()中设置第二个viewController主视图的alpha值,如下所示:

override func viewDidLoad() {
      super.viewDidLoad()
      self.view.backgroundColor = UIColor.black.withAlphaComponent(0.8)
        self.showAnimate()
}

func showAnimate(){
    self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
    self.view.alpha = 0.0;
    UIView.animate(withDuration: 0.25, animations: {
        self.view.alpha = 1.0
        self.view.transform = CGAffineTransform(scaleX: 1.0, y: 1.0)
    });
}

func removeAnimate(){
    UIView.animate(withDuration: 0.25, animations: {
        self.view.transform = CGAffineTransform(scaleX: 1.3, y: 1.3)
        self.view.alpha = 0.0;
    }, completion:{(finished : Bool)  in
        if (finished)
        {
            self.view.removeFromSuperview()
        }
    });
}

@IBAction func closeAction(_ sender:UIButton) {
    removeAnimate()
}

enter image description here

或者您可以使用segues以模态方式呈现视图控制器,并将其表示属性设置为属性检查器中的“在当前上下文中”

enter image description here

或者从代码中你可以这样做:

let popup : PopupVC = self.storyboard?.instantiateViewControllerWithIdentifier("PopupVC") as! PopupVC
 let navigationController = UINavigationController(rootViewController: popup)
 navigationController.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext
 self.presentViewController(navigationController, animated: true, completion: nil) 

希望这有用。快乐的编码。 :)