ios - 以编程方式将 UITapGestureRecognizer 添加到 Outlet 集合中的 UIViews
<p><p>我正在处理存储在 socket 集合中的一系列 View 。</p>
<pre><code>@IBOutlet var theViews: !
</code></pre>
<p>在我的 viewDidLoad 函数中,我循环遍历 View 集合,在此期间我创建了一个 UITapGestureRecognizer 并将其添加到 View 中。</p>
<pre><code>for v in theViews {
let tap = UITapGestureRecognizer(target: self, action: #selector(self.flipSingleView(sender:)))
tap.delegate = self
tap.numberOfTapsRequired = 1
tap.numberOfTouchesRequired = 1
v.addGestureRecognizer(tap)
v.isUserInteractionEnabled = true
}
</code></pre>
<p>这里是选择器指向的函数:</p>
<pre><code>@objc func flipSingleView(sender: UITapGestureRecognizer) {
print("tapped")
}
</code></pre>
<p>补充说明:</p>
<ul>
<li>为这些 View 启用了用户交互</li>
<li>永远无法到达 FlipSingleView 中的断点</li>
<li> ViewController 实现 UIGestureRecognizerDelegate(我查看了协议(protocol),没有看到在这种情况下有用的函数)</li>
<li>已验证所有有问题的 View 都与 socket 集合有 socket 连接</li>
<li>没有任何东西打印到控制台</li>
</ul></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>你提到你的观点在一个导出集合中,所以我假设它看起来像这样:</p>
<pre><code>@IBOutlet var myViews: !
</code></pre>
<p>不确定您是否需要投入其中的所有东西。试试这个:</p>
<pre><code>// In viewDidLoad
myViews.forEach{ view in
let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(gesture:)))
tap.numberOfTapsRequired = 1
tap.delegate = self
view.addGestureRecognizer(tap)
}
</code></pre>
<p>对于您的处理程序:</p>
<pre><code>@objc func handleTap(gesture: UIGestureRecognizer) {
print("tap")
}
</code></pre>
<p>最后,为委托(delegate)方法添加一个部分,即使它只是空的:</p>
<pre><code>extension ViewController: UIGestureRecognizerDelegate {
// TODO: Fill in as needed
}
</code></pre>
<p>要确定是哪个 View 发送的,您可以在 View 中添加标签。</p></p>
<p style="font-size: 20px;">关于ios - 以编程方式将 UITapGestureRecognizer 添加到 Outlet 集合中的 UIViews,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/48727995/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/48727995/
</a>
</p>
页:
[1]