从Utility Class访问UIViewController

时间:2017-11-18 19:37:39

标签: ios swift

背景

我正在尝试组织我的代码以供重用。我喜欢保留一个Utility类来处理我在Android上的所有按钮点击逻辑,并且我正在尝试做类似iOS的事情。

我有一个名为ButtonClicks的文件,其中包含静态方法ClickAction

从我扩展的自定义UIButton添加一些数据,我使用#selector内的UIViewController

内部视图控制器:

  button.addTarget(self, action: #selector(onClick(sender:)), for: .touchUpInside)

// ...

@objc func onClick(sender: Button){
    ButtonClicks.ClickAction(Button: sender)
}

除了在需要时转换到新UIViewControllers之外,其效果与预期相同。

问题:

如何从实用程序类中打开新模式UIViewController

我正在传递一个视图对象,所以我在ButtonClicks类中尝试了以下内容:

Class ButtonClicks {

static func ClickAction(Button: Button) {

...
// logic for sorting out which action to take
...

        let modalViewController = ModalViewController()
        modalViewController.modalPresentationStyle = UIModalPresentationStyle.formSheet
        modalViewController.modalTransitionStyle = UIModalTransitionStyle.coverVertical

        Button.superview?.window?.rootViewController?.present(modalViewController, animated: true, completion: nil)

此代码启动一个视图控制器,以黑色覆盖整个屏幕,忽略.formSheet参数并将应用程序覆盖在黑屏中。它虽然从print()到调试区域执行ModalViewController逻辑。

将演示文稿更改为.partialCurl会出现此错误:

  

应用程序试图将UIModalTransitionStylePartialCurl呈现给或   来自非全屏视图控制器

1 个答案:

答案 0 :(得分:1)

您可以将UIViewController传递给onclick函数,例如:

String appUri = getApplication().getURL().toString() + getWindow().getName() + "/";