如何从我的主视图控制器访问 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 语句?的主要内容,如果未能解决你的问题,请参考以下文章
如何从我的视图控制器引用我的 App Delegate 中的 managedObjectContext?
我如何在swiftui中从我的应用程序中的任何视图访问这个:@Environment(\.managedObjectContext) var context? [关闭]
如何从我的视图的 javascript 访问我的代码隐藏文件中的 JsonResult 变量?剃刀页面。 C#