ios - 仅使 UITableViewCell 触发单元格选择的特定区域
<p><p>我有一个相当高的 UITableViewCell,上面有很多标签和按钮,我只希望标签/按钮未覆盖的某个区域(大约右上角)成为触发单元格选择状态的东西(那里会有一个复选框,用户会很清楚)。我想使用默认的 <code>UITableViewCell</code> 选择,因为它处理 subview 的背景等,因为我需要单元格的点击状态以将整个单元格显示为浅蓝色。</p>
<p>我尝试在我的标签和按钮后面放置一个没有任何作用的大按钮来“掩盖”一个区域,这在您实际点击按钮本身的某些地方有效,但是如果您点击一个标签在它后面的按钮,单元格仍然会消耗该点击并且单元格会突出显示。奇怪的是,水龙头没有转到中间的按钮。</p>
<p>如何拦截点击并确保只有在特定区域内表格 View 才会获得该点击并触发单元格突出显示?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>听起来您想避免在用户点击单元格中的某些 View 时调用 <code></code>。我建议通过在 <code>UITableViewCell</code> 子类中覆盖 <code></code> 来实现。
<code></code>的默认返回值定义如下</p>
<blockquote>
<p>The view object that is the farthest descendent the current view and contains point. Returns nil if the point lies completely outside the receiver’s view hierarchy.</p>
</blockquote>
<p>所以通过覆盖它并返回一个备用 <code>UIView</code> 实例(您的 subview 的一个实例)而不是 <code>UITableViewCell</code> 实例,我们可以让 TableViewController 相信您已启动除了 <code>UITableViewCell</code> 实例之外的其他东西。</p>
<p>一个例子如下(我对 Swift 的了解非常有限。我的应用程序。):</p>
<pre><code>- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
// suppose you put all your subviews in contentView
for (UIView *subview in self.contentView.subViews) {
// translates the point relative to the subviews coordinate system.
CGPoint convertedPoint = ;
// returns the subview instance if the touch happens inside the subview.
if (CGRectContainsPoint(subview.bounds, convertedPoint)) {
return subview;
}
}
// call the super's implementation if you find the touch didn't hit any sub view
return ;
}
</code></pre></p>
<p style="font-size: 20px;">关于ios - 仅使 UITableViewCell 触发单元格选择的特定区域,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/46255024/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/46255024/
</a>
</p>
页:
[1]