我需要呈现(使用自定义动画)一个viewcontroller /" alertView"类似于我收到推送通知(voip call)时附带的图片。我们目前提供的标准alertView运行良好,因此这将是一个更新。
我想在故事板中创建IncomingCallAlertVC,然后使用我从推送通知收到的信息(名称,选项,铃声等)填充它 我这样做有些困难,并且想知道是否有人可以帮助我。
这就是我试图呈现它的方式:
let incomingCallAlertVC = IncomingCallAlertVC()
incomingCallAlertVC.displayMessage("MACKLEMORE")
这是viewcontroller:
class IncomingCallAlertVC: UIViewController {
@IBOutlet weak var mylabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.clearColor()
self.modalPresentationStyle = UIModalPresentationStyle.OverFullScreen
}
func displayMessage(name:String) {
self.mylabel.text = name
let delegate:UIApplicationDelegate = UIApplication.sharedApplication().delegate!
let window:UIWindow! = delegate.window!
window.rootViewController?.dismissViewControllerAnimated(false, completion: nil)
window.rootViewController!.presentViewController(self, animated: false, completion: nil)
UIView.animateWithDuration(0.3, delay: 0, options: UIViewAnimationOptions.CurveEaseOut, animations: { () -> Void in
self.view.alpha = 1
}) { (Bool) -> Void in
}
}
但我总是得到:
fatal error: unexpectedly found nil while unwrapping an Optional value
at
self.mylabel.text = name
如何在不使用segues的情况下呈现ViewController并传递数据?
答案 0 :(得分:1)
UIViewController
的指定初始值设定项为init(nibName:bundle:)
。创建视图控制器实例时,您只需创建该类的空白,哑的实例。使用指定的初始值设定项:IncomingCallAlertVC(nibName:"whatever", bundle:nil)
。
您遇到的另一个问题是您的myLabel
电源插座无法连接(将nil
),直到加载视图(这只是第一次发生)您访问控制器的view
属性或手动调用loadView
。
<强>更新强>
根据您对@FelixSFD的评论,您仍应使用UIStoryboard.instantiateViewControllerWithIdentifier()
制作视图控制器。您不必使用segue,但如果您从故事板创建程序集,这是正确的方法。