菜鸟教程小白 发表于 2022-12-11 17:03:06

ios - tableCell 中的分段控件


                                            <p><p>我在表格单元格中遇到分段控制问题。分段控制无 Action </p>

<pre><code>segmentedFilter.addTarget(self, action: #selector(ProductListFilterCell.filterSelected), forControlEvents: .AllEvents)
</code></pre>

<p>目标函数:</p>

<pre><code>func filterSelected() {
    if let order = ProductListViewModel.OrderBy(rawValue: segmentedFilter.selectedSegmentIndex), let change = orderChanged{
      change(order)
    }
}
</code></pre>

<p>是否可以在表格单元格中进行分段控制?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>在<code>prepareForReuse</code>中调用<code>addTarget</code>是不正确的,因为这个方法是在cell不再需要的时候调用的。只有重复使用的单元格上才会有选择器。</p>

<p>第二个问题是目标:你传递的是<code>self</code>,它是表格的数据源,但是选择器引用了单元格。如果您通过多次上下滚动来调出一个重复使用的单元格,您的控件将触发该事件,并且应用程序将崩溃并显示未知的选择器消息。</p>

<p>您可以通过将方法移动到数据源类中来解决此问题,在 <code>cellForRowAtIndexPath</code> 中添加目标,并在 <code>prepareForReuse</code> 中删除目标。</p>

<pre><code>segmentedFilter.addTarget(self, action: #selector(ProductListDataSource.filterSelected), forControlEvents: .AllEvents)
//                                             ^^^^^^^^^^^^^^^^^^^^^^
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - tableCell 中的分段控件,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/38508504/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/38508504/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - tableCell 中的分段控件