gpt4 book ai didi

ios - 在自定义 UITableViewCell 中控制 UISwitch

转载 作者:行者123 更新时间:2023-11-28 19:04:35 24 4
gpt4 key购买 nike

我已经为单元格创建了一个自定义的 UITableViewCell 和一个类。然后我将我的 viewController 中的这个单元格加载到 TableView 中。自定义单元格有一个标签和一个 UiSwitch。我已经设法让开关按我想要的方式工作,并更改了需要更改的值。

我现在想要在 UITableView 之外有一个单独的 UISwitch - 当它打开时 - UITableView 中的所有开关都打开。

出于某种原因,我无法让它工作。

这是自定义单元格的代码:

- (void)selectAllSwitches:(BOOL)selected 
{
if (selected){
[self.selectSwitch setOn:YES animated:YES];
}else{
[self.selectSwitch setOn:NO animated:YES];
}

}
-(void)setMaillist:(BBMailList *)aMaillist
{
maillist = aMaillist;

if (maillist){
self.nameLabel.text = maillist.name;

if (self.maillist.isSubscribed){
self.selectSwitch.on = YES;
}else{
self.selectSwitch.on = NO;
}
}
}

- (IBAction)switchControl:(UISwitch *)sender
{
self.maillist.isSubscribed = !self.maillist.isSubscribed;

NSLog (@"IsSubScribed: %ul", self.maillist.isSubscribed);

if (self.maillist.isSubscribed){
self.selectSwitch.on = YES;
}else{
self.selectSwitch.on = NO;
}
}

然后在 cellForRowAtIndexPath 中:

static NSString *mailListTableViewCellIdentifier = @"BBMailListTableViewCell";

if (tableView == self.maillistTableview ){

BBMailListTableViewCell * maillistTableviewCell = [self.maillistTableview dequeueReusableCellWithIdentifier:mailListTableViewCellIdentifier];
if (!maillistTableviewCell){
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:mailListTableViewCellIdentifier owner:self options:nil];
maillistTableviewCell = nib[0];
}


if ([self.mailLists count ] > 0){
NSMutableArray *newArray = [NSMutableArray arrayWithArray:self.mailLists];
[newArray removeLastObject];
[newArray removeLastObject];
[self.maillistTableview setContentSize:CGSizeMake(320, 400)];

BBMailList *maillist = newArray[indexPath.row];

maillistTableviewCell.maillist = maillist;
}

return maillistTableviewCell;
}

此代码按我的需要工作。

然后我在 viewController 中为 tableView 之外的 UISwitch 创建了一个 IBAction 方法

- (IBAction)selectAllSwitch:(UISwitch *)sender
{
BBMailListTableViewCell *switchButton = [[BBMailListTableViewCell alloc]init];
[switchButton selectAllSwitches:YES];
}

这会在我的 UITableViewCell 类中运行正确的方法 - 但 UITableView 不会反射(reflect)更改。我添加了 [self.myTableView reloadData]; - 但这并没有解决问题。任何人都可以为我阐明一些不是他的光吗?

****更新****

更新了 UITableView 之外的 UISwitch 代码

- (IBAction)selectAllSwitch:(UISwitch *)sender
{

BBMailList *tempMailList = [[BBMailList alloc]init];

tempMailList.isSubscribed = YES;

[self.maillistTableViewCell setMaillist:tempMailList];

[self.maillistTableViewCell selectAllSwitches:YES];


[self.maillistTableview reloadData];


}

每个 mailistItem 都是我用来存储数据的 NSObject。上面的代码运行了正确的方法——但似乎我没有保持状态 maybe and when [self.mayTableView reloadData];运行 - 它将 tableview 数据重置为原始状态?

最佳答案

解决问题的逻辑是:

1) 从您的代码看来,开/关功能取决于您的 maillist.isSubscribed 属性。在 View Controller 的 IBAction 中,将其设置为 true

2) 在这个IBAction中调用[self.myTableView reloadData];。因此,一旦表加载单元格,数组的元素将帮助将开关设置为开/关。

希望对您有所帮助!

编辑

你好像迷路了。因为在 viewController 的 IBAction 中,您正在创建类型为 BBMailList 的新数组。像这样尝试:

假设您的 self.mailListsBBMailList 类型的集合。

现在:

- (IBAction)selectAllSwitch:(UISwitch *)sender
{
// loop through each array element set it to true.
for (BBMailList *tempMailList in self.mailLists)
{
tempMailList.isSubscribed = Yes;
}

// reload table data so once table
[self.maillistTableview reloadData];
}

并在 cellForRowAtIndexPath 中更改您的邮件列表设置,如下所示:

if ([self.mailLists count ] > 0){
NSMutableArray *newArray = [NSMutableArray arrayWithArray:self.mailLists];
[newArray removeLastObject];
[newArray removeLastObject];
[self.maillistTableview setContentSize:CGSizeMake(320, 400)];

BBMailList *maillist = newArray[indexPath.row];

[maillistTableviewCell setMaillist: maillist]; // <--- Changed this line
}

关于ios - 在自定义 UITableViewCell 中控制 UISwitch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21670419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com