背景:
我正在尝试组织我的代码以供重用。我喜欢保留一个Utility,它处理我在Android上的所有按钮点击逻辑,并试图对iOS做一些类似的事情。
我有一个名为ButtonClicks
的文件,它有一个静态方法ClickAction
。
从我扩展到添加一些数据的自定义UIButton
中,我在UIViewController
中使用了#selector
。
内部视图控制器:
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。
发布于 2017-11-18 12:02:52
您可以将UIViewController传递给onclick函数,如:
static func ClickAction(Button: Button, viewController: UIViewController) {
//...
viewController.present(...
}
https://stackoverflow.com/questions/47370226
复制