菜鸟教程小白 发表于 2022-12-12 21:30:33

ios - UITableViewCell 内部的 UISwitch


                                            <p><p>我有一个带有自定义单元格的表格 View (<code>UISwitch</code> 在表格 View 的每个单元格上)。</p>

<p>我的单元格是这样设置的:</p>

<pre><code>switchView = [ initWithFrame:CGRectMake(200.0f, 5.0f, 75.0f, 30.0f)];
cell.accessoryView = switchView;
;
;
;
</code></pre>

<p>而用户改变<code>UISwitch</code>时调用的 Action 是:</p>

<pre><code>-(IBAction)favorite:(id)sender
{
    indexPath = ];
    NSMutableArray *favoriteList = [init];
    NSString *favoriteItem = .textLabel.text;
    NSLog(favoriteItem);

    if ()
    {
      ;

      NSUserDefaults *favoriteDefaults = ;
      ;
      NSLog(@&#34;%@&#34;, favoriteList);
    }
    else
    {
      ;

      NSUserDefaults *favoriteDefaults = ;
      ;
      NSLog(@&#34;%@&#34;, favoriteList);
    }
}
</code></pre>

<p><strong>问题是:</strong><br/>
在测试应用程序时,只有表格 View 的最后一项(单元格)可以正常工作。 </p>

<p>对于其他人,调试器返回 <code>UISwitch</code> 的状态始终为“OFF”。 </p>

<p>有什么问题?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>几个即时 react :</p>

<ol>
<li><p>在 <code>(IBAction)favorite:(id)sender</code> 中,您没有抓取相关单元格的 switchView,而只是使用该类 ivar 的最后引用所使用的内容.同样,在您的 <code>cellForRowAtIndexPath</code> 中,您似乎正在设置(并反复重置)这个相同的单个 <code>switchView</code> ivar。可能根本不应该是 ivar。您可以将 <code>switchView</code> 设为 <code>cellForRowAtIndexPath</code> 的局部变量。您也可以将其设为 <code>favorite</code> 的局部变量。但最重要的是,<code>favorite</code> 应该将其设置为 <code>UISwitch *switchView = sender</code>。</p></li>
<li><p>我假设您想将所有收藏夹保存为用户默认设置。你当前的 <code>(IBAction)favorite:(id)sender</code> 每次都会重新创建 favoriteList,它要么有一个项目,要么没有项目,但肯定会丢弃你可能选择的任何其他收藏夹过去。</p></li>
<li><p>一个小问题,但是如果你设置了附属单元格,你不需要将switchView也添加到 subview 中。</p></li>
</ol>

<p>所以,我建议修改 <code>cellForRowAtIndexPath</code> 如下:</p>

<pre><code>NSString *title = ; // clearly, you&#39;ll get the text however you&#39;re getting your text now ... I&#39;m just storing in array
cell.textLabel.text = title;

BOOL isFav = ; // go to user defaults and find out if it&#39;s there or not

UISwitch *switchView = [ initWithFrame:CGRectMake(200.0f, 5.0f, 75.0f, 30.0f)];
;
;
cell.accessoryView = switchView;
</code></pre>

<p>这使用 <code>isFavorite</code>:</p>

<pre><code>- (BOOL)isFavorite:(NSString *)title
{
    NSUserDefaults *userDefaults = ;
    NSArray *listOfFavorites = ;

    if (listOfFavorites)
      return ;

    return NO;
}
</code></pre>

<p>那么,很明显,你需要定义你的<code>toggleFavoriteSwitch</code>(以前称为<code>favorite</code>)方法:</p>

<pre><code>- (IBAction)toggleFavoriteSwitch:(UISwitch *)switchView
{
    UITableViewCell *cell = (UITableViewCell *);

    ];
}
</code></pre>

<p>这是更新用户默认值如下:</p>

<pre><code>- (void)updateFavoriteInUserDefaultsFor:(NSString *)title withValue:(BOOL)isOn
{
    NSUserDefaults *userDefaults = ;

    NSArray *oldFavorites = ;

    NSMutableArray *newFavorites;

    if (!oldFavorites)
      newFavorites = [ init];
    else
      newFavorites = ;

    if (isOn)
      ;
    else
      ;

    ;

    ;
}
</code></pre>

<p>希望这可以解决您的问题。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - UITableViewCell 内部的 UISwitch,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/11128520/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/11128520/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - UITableViewCell 内部的 UISwitch