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(@"%@", favoriteList);
}
else
{
;
NSUserDefaults *favoriteDefaults = ;
;
NSLog(@"%@", 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'll get the text however you're getting your text now ... I'm just storing in array
cell.textLabel.text = title;
BOOL isFav = ; // go to user defaults and find out if it'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]