菜鸟教程小白 发表于 2022-12-13 02:36:14

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&#39;s implementation if you find the touch didn&#39;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]
查看完整版本: ios - 仅使 UITableViewCell 触发单元格选择的特定区域