gpt4 book ai didi

ios - UITableView 中每个 UITableViewcell 的 SwitchView

转载 作者:行者123 更新时间:2023-11-29 10:44:20 28 4
gpt4 key购买 nike

我在 UItableviewcell 中添加了一个 switchview 作为附件 View ,我在表中有 5 个条目,即 5 个单元格和该行中的开关。我给每个开关一个等于 indexpath 的标签值.row(所以第一个开关是 0,第二个是 1 ...,第五个开关是 4)


UISwitch *switchView = [[UISwitch alloc]initWithFrame:CGRectZero];
cell.accessoryView = switchView;
[switchView setOn:NO animated:NO];
[switchView setTag:indexPath.row];

我已经为开关提供了一个目标方法,当开关的值改变时会调用目标方法..

[switchView addTarget:self action:@selector(switchTimer:)   forControlEvents:UIControlEventValueChanged];

在这个基于开关事件变化的目标方法中,我试图构建一个计数等于开关数量的数组。例如:如果开关 0 和 3 打开,而开关 1、2、4 关闭,则数组看起来像这样

A = {"ON","OFF","OFF","ON","OFF"}

以下是我用来实现此目的的方法:

-(void)switchTimer:(UISwitch *)senderSwitch{
NSLog(@"Sender Switch Tag is %d",senderSwitch.tag);

for(int i=0;i<[array_Timers count];i++){//Start for loop

senderSwitch.tag = i;

if(senderSwitch.on){
NSLog(@"%@ is ON",[array_Timers objectAtIndex:i]);
//Here I add an object to the array with value "ON"

}
else{
NSLog(@"%@ is OFF",[array_Timers objectAtIndex:i]);
//Here I add an object to the array with value "OFF"
}

}//End for loop
}

问题是每次开关打开时,比如开关 2(带有标签 1),所有开关都将获得标签值 1,即使我在标签值的帮助下遍历所有开关也是如此。我想知道所有开关的状态,即使只有 1 个开关的值发生变化。但那没有发生,所有开关都获得标签值 1,我得到一个这样的数组

A = {"ON","ON","ON","ON","ON"}//when switch 2 is ON

A = {"OFF","OFF","OFF","OFF","OFF"}//when switch 2 is OFF

有人可以帮我找出问题所在吗?提前致谢

编辑:完整的 cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [timersTableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleGray;


if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.accessoryType=UITableViewCellAccessoryNone;

UISwitch *switchView = [[UISwitch alloc]initWithFrame:CGRectZero];
cell.accessoryView = switchView;
[switchView setOn:NO animated:NO];
[switchView setTag:indexPath.row];
[switchView addTarget:self action:@selector(switchTimer:) forControlEvents:UIControlEventValueChanged];
[switchView release];


UIView *v = [[[UIView alloc] init] autorelease];
v.backgroundColor = [UIColor orangeColor];
cell.selectedBackgroundView = v;

}
UserTimer *usertimer = [array_Timers objectAtIndex:indexPath.row];//irrelevant here
[cell.textLabel setText:usertimer.alias];


return cell;

最佳答案

当您使用 for 循环时,开关的值会发生变化。所以你不需要在这里使用 for 循环。相反,您可以只替换当前开关索引处的对象。

-(void)switchTimer:(UISwitch *)senderSwitch {
NSString *currentValue = @"";
NSInteger index = senderSwitch.tag;
if(senderSwitch.on){
currentValue = @"ON";
}
else {
currentValue = @"OFF";
}

[array_Timers replaceObjectAtIndex: index withObject: currentValue];
}

关于ios - UITableView 中每个 UITableViewcell 的 SwitchView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22952646/

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