如何从我的主视图控制器访问 UIView 中的 let 语句?

Posted

技术标签:

【中文标题】如何从我的主视图控制器访问 UIView 中的 let 语句?【英文标题】:How to access a let statement in a UIView from my main View Controller? 【发布时间】:2018-02-08 23:26:10 【问题描述】:

在我的主 ViewController 的 viewdidload 中,我创建了一个 let 语句,这样我就可以启用一个点击功能。

override func viewDidLoad() 
    super.viewDidLoad()

    let tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.tap(_:)))
    self.view.addGestureRecognizer(tapRecognizer) 

在单独的视图中,我想禁用这个 let 语句:

tapRecognizer.isenabled = false

从我的主 ViewController 访问“tapRecognizer”的最简单方法是什么,而不使用 segue,因为第二个视图是 UIView,所以我认为我不能通过这种方式访问​​它。

【问题讨论】:

这就是实例变量/属性的用途。 【参考方案1】:

声明tapRecognizer 实例变量,以便可以通过任何方法访问它,或者如果它当前存在,则可以在视图控制器之外访问

var tapRecognizer:UITapGestureRecognizer!
override func viewDidLoad() 
   super.viewDidLoad()

   tapRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.tap(_:)))
   self.view.addGestureRecognizer(tapRecognizer) 
 

【讨论】:

在这种情况下,将tapRecognizer 声明为隐式展开而不是可选可能是有意义的。 声明一个全局变量不一定是最好的解决方案,因为所有视图控制器都可以访问和修改它,如果您与一个大团队合作,这可能会让人感到困惑。 我同意,但代表问题可能需要它 澄清点:将变量 tapRecognizer 设为 instance 变量,而不是 global 变量(在定义视图的大括号内声明它控制器的类。)正如@vadian 所说,将其设为全局可能不是一个好主意。您的答案似乎将其显示为实例变量。我想你可能只是用错了词。 是的,我的意思是实例,抱歉打错了

以上是关于如何从我的主视图控制器访问 UIView 中的 let 语句?的主要内容,如果未能解决你的问题,请参考以下文章

iOs - 将uiview插入代码中的另一个视图,保持约束

如何从我的视图控制器引用我的 App Delegate 中的 managedObjectContext?

我如何在swiftui中从我的应用程序中的任何视图访问这个:@Environment(\.managedObjectContext) var context? [关闭]

如何从我的视图的 javascript 访问我的代码隐藏文件中的 JsonResult 变量?剃刀页面。 C#

如何访问使用 Paintcode 生成的 UIView 自定义类中的图层?

如何从一个 XIB 中的不同 UIViewController 文件控制第二个 UIView(子视图)