• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - UITableViewCell 内部的 UISwitch

[复制链接]
菜鸟教程小白 发表于 2022-12-12 21:30:33 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

我的单元格是这样设置的:

switchView = [[UISwitch alloc] initWithFrame:CGRectMake(200.0f, 5.0f, 75.0f, 30.0f)];
cell.accessoryView = switchView;
[switchView setOn:NO animated:NO];
[switchView addTarget:self actionselector(favorite forControlEvents:UIControlEventValueChanged];
[cell addSubview:switchView];

而用户改变UISwitch时调用的 Action 是:

-(IBAction)favoriteid)sender 
{
    indexPath = [self.tableView indexPathForCellUITableViewCell*)[sender superview]];
    NSMutableArray *favoriteList = [[NSMutableArray alloc]init];
    NSString *favoriteItem = [self.tableView cellForRowAtIndexPath:indexPath].textLabel.text;
    NSLog(favoriteItem);

    if ([switchView isOn]) 
    {
        [favoriteList addObject:favoriteItem];

        NSUserDefaults *favoriteDefaults = [NSUserDefaults standardUserDefaults];
        [favoriteDefaults setObject:favoriteList forKey"MyFavorites"];
        NSLog(@"%@", favoriteList);
    }
    else
    {
        [favoriteList removeObject:favoriteItem];

        NSUserDefaults *favoriteDefaults = [NSUserDefaults standardUserDefaults];
        [favoriteDefaults setObject:favoriteList forKey"MyFavorites"];
        NSLog(@"%@", favoriteList);
    }
}

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

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

有什么问题?



Best Answer-推荐答案


几个即时 react :

  1. (IBAction)favoriteid)sender 中,您没有抓取相关单元格的 switchView,而只是使用该类 ivar 的最后引用所使用的内容.同样,在您的 cellForRowAtIndexPath 中,您似乎正在设置(并反复重置)这个相同的单个 switchView ivar。可能根本不应该是 ivar。您可以将 switchView 设为 cellForRowAtIndexPath 的局部变量。您也可以将其设为 favorite 的局部变量。但最重要的是,favorite 应该将其设置为 UISwitch *switchView = sender

  2. 我假设您想将所有收藏夹保存为用户默认设置。你当前的 (IBAction)favoriteid)sender 每次都会重新创建 favoriteList,它要么有一个项目,要么没有项目,但肯定会丢弃你可能选择的任何其他收藏夹过去。

  3. 一个小问题,但是如果你设置了附属单元格,你不需要将switchView也添加到 subview 中。

所以,我建议修改 cellForRowAtIndexPath 如下:

NSString *title = [_favorites objectAtIndex:indexPath.row]; // 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 = [self isFavorite:title]; // go to user defaults and find out if it's there or not

UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectMake(200.0f, 5.0f, 75.0f, 30.0f)];
[switchView setOn:isFav animated:NO];
[switchView addTarget:self actionselector(toggleFavoriteSwitch forControlEvents:UIControlEventValueChanged];
cell.accessoryView = switchView;

这使用 isFavorite:

- (BOOL)isFavoriteNSString *)title
{
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    NSArray *listOfFavorites = [userDefaults objectForKey:kMyFavsKey];

    if (listOfFavorites)
        return [listOfFavorites containsObject:title];

    return NO;
}

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

- (IBAction)toggleFavoriteSwitchUISwitch *)switchView
{
    UITableViewCell *cell = (UITableViewCell *)[switchView superview];

    [self updateFavoriteInUserDefaultsFor:cell.textLabel.text withValue:[switchView isOn]];
}

这是更新用户默认值如下:

- (void)updateFavoriteInUserDefaultsForNSString *)title withValueBOOL)isOn
{
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    NSArray *oldFavorites = [userDefaults objectForKey:kMyFavsKey];

    NSMutableArray *newFavorites;

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

    if (isOn)
        [newFavorites addObject:title];
    else
        [newFavorites removeObject:title];

    [userDefaults setObject:newFavorites forKey:kMyFavsKey];

    [userDefaults synchronize];
}

希望这可以解决您的问题。

关于ios - UITableViewCell 内部的 UISwitch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11128520/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap