代码之家  ›  专栏  ›  技术社区  ›  Abed Naseri

脚本中的自定义AlertViewController

  •  0
  • Abed Naseri  · 技术社区  · 6 年前

    我想显示一个弹出窗口 UIAlertController 记住)如下图所示:

    我想达到的目标

    enter image description here

    我在互联网上发现了一些类似的问题,但它们都是基于代码的,这样就很难将这些问题与我想要的位置对齐并处理用户交互。

    有没有办法让我在 Storyboard 然后就在这里弹出来?我想到了一个整体 ViewController 但那覆盖了整个屏幕。

    如有任何建议或解决方案,我们将不胜感激。__

    3 回复  |  直到 6 年前
        1
  •  1
  •   Shehata Gamal    6 年前

    你需要以模式呈现它,所以让vc给出它的标识符并将其加载到任何地方

    let vc = self.storyboard?.instantiateViewController(withIdentifier: "popupID") as! PopupViewController
    
    vc.sendedStr = "someContent"
    
    vc.myImage = UIImage(named:"flag.png")     
    
    vc.providesPresentationContextTransitionStyle = true;
    
    vc.definesPresentationContext = true;
    
    vc.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
    
    self.present(vc, animated:true, completion: nil)
    

    //

    class PopupViewController : UIViewController {
    
        var sendedStr:String?
    
        var myImage:UIImage?      
    }
    

    更重要的是在ib中设置这样的视图背景 enter image description here

        2
  •  1
  •   CZ54    6 年前

    ViewController 不会一直占据整个屏幕。这只是默认设置。

    .modalPresentationStyle 子控制器的属性 .overCurrentContext 并以模式呈现。

    现在,如果您查看的控制器有一个透明的背景,它将显示为一个警告。

        3
  •  1
  •   Abdul Rehman    6 年前

    故事板中的第一个设计viewcontroller并记住viewcontroller主视图背景颜色应该是透明的,或者将其alpha更改为0.5。

    在扩展下面添加

    extension UIViewController {
        open func presentPOPUP(_ viewControllerToPresent: UIViewController, animated flag: Bool, modalTransitionStyle:UIModalTransitionStyle = .coverVertical, completion: (() -> Swift.Void)? = nil) {
    
            viewControllerToPresent.modalPresentationStyle = .overCurrentContext
            viewControllerToPresent.modalTransitionStyle = modalTransitionStyle
    
            self.present(viewControllerToPresent, animated: flag, completion: completion)
    
        }
    }
    

    之后你可以像下面这样使用它

    if let alerVC = self.myStoryBoard.instantiateViewController(withIdentifier: "AlertMessageVC") as? AlertMessageVC {
           self.presentPOPUP(alerVC, animated: true, modalTransitionStyle: .crossDissolve, completion: nil)
    }
    

    您也可以将modalTransitionStyle更改为以下选项

     .coverVertical
     .flipHorizontal
     .crossDissolve
     .partialCurl
    

    希望能帮上忙。:)