UIButton 操作未在模态显示的 ViewController 上触发

Posted

技术标签:

【中文标题】UIButton 操作未在模态显示的 ViewController 上触发【英文标题】:UIButton action not triggering on ViewController that is presented modally 【发布时间】:2021-12-18 23:44:17 【问题描述】:

这是我的一个非常简单的配置。 有 MainController,它将呈现 NewController。一旦出现 NewController,整个 UI 就会加载。其中一些在 UIScrollView 中,一些是静态的。我在导航栏中有几个 UIButton 和一个 UIBarButtonItem。 UIBarButtonItem 按预期运行。但是,我的 UIButtons 什么也没做。如果您按住它们,它们会突出显示,但 touchUpInside 事件似乎没有调用我的 @Objc 方法。

我不明白的是,在某一时刻,我推送了 NewController 而不是呈现,并且 UIButton 工作正常。现在它正在呈现,但它们不起作用。

根据我已经对此问题进行的研究,由于 NewController 的多个实例而导致按钮被按下两次似乎很常见。但对我来说不是这样。

MainController 呈现方式:

let newController = NewController()
let navController = UINavigationController(rootViewController: newController)
navController.modalPresentationStyle = .popover
self.present(navController, animated: true, completion: nil)

我的 UIButton 及其在 NewController 中的方法:

static let star: UIButton = 
    let btn = UIButton()
    btn.setImage(UIImage(systemName: "star"), for: .normal)
    btn.setImage(UIImage(systemName: "star.fill"), for: .selected)
    btn.setTitle("  Add to Favorites", for: .normal)
    btn.setTitle("  Remove from Favorites", for: .selected)
    btn.titleLabel?.font = UIFont.systemFont(ofSize: 14)
    btn.setTitleColor(UIColor.white, for: [.normal, .selected])
    btn.setTitleColor(UIColor.r6whiteAlpha(), for: [.highlighted, .focused])
    btn.tintColor = .white
    btn.addTarget(self, action: #selector(starTapped), for: .touchUpInside)
    return btn
()

@objc func starTapped() 
    print("star tapped") // Nothing prints to console.

我应该提到的是我遇到问题的所有 UIButton 都是静态变量。它们也都在 UIScrollView 内部。

更新:我更改了我的代码以强制只存在一个 NewController 实例并消除对静态变量的需要,但它没有改变任何东西。

【问题讨论】:

【参考方案1】:

好的,我又花了几个小时在上面。经过无数次的尝试和查看我的代码,我发现了问题,并且非常奇怪。

在 MainController 上,我有一个 UITextField。一旦按下返回键,它就会显示 NewController。键盘关闭并呈现。我在演讲之前没有打电话给textField.endEditing(true),这似乎导致了我的问题。

解决方案: 如果你有一个 UITextField 作为第一响应者,你必须在模态显示另一个 ViewController 之前调用endEditing(true),否则你会遇到这个问题。

【讨论】:

以上是关于UIButton 操作未在模态显示的 ViewController 上触发的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 未在边框上突出显示

ReactStrap 模态关闭图标未在模态中显示以及如何将标题与其他标签一起使用

单击按钮后,Bootstrap5 模态未在 React.js 中显示

页面/模态未在生产版本中显示(可执行文件)Vue-Electron-Vuetify

具有目标操作的单元格上的 iOS UIButton,单元格未在 (id)sender 中更新

按钮未在自定义 UIButton 中注册触摸