Swift 3 无法使用 UIWindow 调用函数
Posted
技术标签:
【中文标题】Swift 3 无法使用 UIWindow 调用函数【英文标题】:Swift 3 Can't get function called with UIWindow 【发布时间】:2017-08-11 17:53:07 【问题描述】: let PostButton: UIButton =
let pB = UIButton(type: .system)
pB.setTitle("Post", for: .normal)
pB.titleLabel!.font = UIFont(name: "Arial Rounded MT Bold", size:18)
pB.setTitleColor(UIColor .green, for: .normal)
pB.translatesAutoresizingMaskIntoConstraints = false
pB.addTarget(self, action: #selector(postingTextPost), for: .touchUpInside)
return pB
()
func postingTextPost()
...
func setupTextWindow()
let window: UIWindow = UIApplication.shared.keyWindow!
let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
blurEffectView.frame = window.bounds
blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
window.addSubview(blurEffectView)
window.addSubview(PostBarContainer)
window.addSubview(PostBar)
window.addSubview(PostButton)
PostBarContainer.centerXAnchor.constraint(equalTo: window.centerXAnchor).isActive = true
PostBarContainer.bottomAnchor.constraint(equalTo: window.centerYAnchor).isActive = true
PostBarContainer.widthAnchor.constraint(equalTo: window.widthAnchor).isActive = true
PostBarContainer.heightAnchor.constraint(equalToConstant: 50).isActive = true
PostBar.bottomAnchor.constraint(equalTo: PostBarContainer.bottomAnchor).isActive = true
PostBar.widthAnchor.constraint(equalTo: PostBarContainer.widthAnchor, constant: -80).isActive = true
PostBar.heightAnchor.constraint(equalTo: PostBarContainer.heightAnchor).isActive = true
PostButton.bottomAnchor.constraint(equalTo: PostBarContainer.bottomAnchor).isActive = true
PostButton.widthAnchor.constraint(equalToConstant: 90).isActive = true
PostButton.rightAnchor.constraint(equalTo: PostBar.rightAnchor, constant: 80).isActive = true
PostButton.heightAnchor.constraint(equalTo: PostBarContainer.heightAnchor).isActive = true
我在UIViewController
中有一些代码来执行发布功能。但是,在UIWindow
中,我无法将该函数称为“它可能是有史以来最小的问题”。该函数也在viewcontroller
中。它与函数无关,只是没有通过 PostButton 上的#selector 调用。
我知道我在这里缺少一些东西,但就在键窗口内执行功能而言,最佳做法是什么?我知道无论如何都不应该将所有东西都扔到视图控制器中,但是,是的,对于一些建议/提示也很有用!
【问题讨论】:
请尝试像这样添加目标:pB.addTarget(self, action: "postingTextPost", for: .touchUpInside) @user1000 是的,Xcode 将其更正为:pB.addTarget(self, action: #selector(postController.postingTextPost), for: .touchUpInside)。还是没有运气 这段代码你是在哪个班级写的? @user1000 postController 您这样做的目的是什么?你为什么用这样的窗口?你试过用视图代替吗?我认为你不应该像这样使用 UIWindow 【参考方案1】:是按钮的动作没有被识别,还是只是没有调用正确的函数?
如果无法识别来宾,那么我认为这与作为 UIViewController 的父视图有关,而不是与 UIWindow 有关。您正在初始化按钮并添加将父级设置为“self”的访客识别器。在这种情况下,Self 是 UIViewController,而实际上父视图需要是 UIWindow。我建议将 window 更改为类级别常量,然后将您的客人识别行更改为
pB.addTarget(window, action: #selector(postingTextPost), for: .touchUpInside)
【讨论】:
嘿,谢谢你的回答,但是关于你所说的。正在识别手势,按钮正在工作,但未调用选择器。我尝试了这个错误和错误,所以我认为我们现在正在到达某个地方!由于未捕获的异常'NSInvalidArgumentException',它引发了终止应用程序的异常,原因:'-[UIWindow postTextPost]:无法识别的选择器发送到实例 0x7f86a9709480' @zak 哦,天哪,我很惊讶我错过了这个,选择的需要指向一个函数,所以我认为错误是你忘记了函数上的括号。将选择器替换为 #selector(postingTextPost()) 是的,仍然没有运气伙伴,它正在找到该函数,但在运行它时没有调用它。还没有解决这个问题,真的很烦。以上是关于Swift 3 无法使用 UIWindow 调用函数的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中从 AppDelegate 解开 UIWindow 两次
在iOS上没有调用sceneDidEnterBackground,swift
我想在 Swift 项目中创建一个新的 UIWindow,但是出了点问题