我是 iOS 编码的新手,我在 SO 中环顾四周并尝试了几种方法来解决这个问题,但似乎没有任何效果。我确信这是因为我的一些愚蠢的错误:-)
我有一个分区表,总共大约 25 行,分为 2 个部分。每个都有一个开关cell.accessoryView
,我尝试在开关状态更改时将其存储在 a 中,但是无论如何NSArray
在该索引处记录数组内容都会奇怪地返回。0
(该数组被实例化为 的属性(nonatomic, readwrite)
,TableViewController
并被合成)
显然,当我上下滚动表格时,所有开关都返回默认OFF
状态。
谢谢你的帮助!
- (void)viewDidLoad
{
[super viewDidLoad];
//countries dict and switch state array init..
self.countries = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"countries" ofType:@"plist"]];
NSNumber *b = [NSNumber numberWithBool:NO];
for (int i=0; i<210; i++) {
[statiSwitch addObject:b];
NSLog(@"%d", [[statiSwitch objectAtIndex:i] integerValue]);
}
//tableview drawing..
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"CellWithSwitch";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
NSString *continent = [self tableView:tableView titleForHeaderInSection:indexPath.section];
NSString *country = [[self.countries valueForKey:continent] objectAtIndex:indexPath.row];
//Simple tag calculation...
NSInteger tagOb = indexPath.section * 100 + indexPath.row;
UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectZero];
[mySwitch addTarget:self action:@selector(switchChange:) forControlEvents:UIControlEventValueChanged];
mySwitch.tag = tagOb;
if ([statiSwitch count] > tagOb) {
[mySwitch setOn:[[statiSwitch objectAtIndex:tagOb] boolValue] animated:NO];
}
cell.textLabel.text = country;
cell.accessoryView = mySwitch;
return cell;
}
然后在开关状态更改时调用的方法:
- (void) switchChange:(UISwitch *)sender {
NSNumber *c = [NSNumber numberWithBool:sender.on];
[statiSwitch replaceObjectAtIndex:sender.tag withObject:c];
NSLog(@"switch tag is: %i and state is: %d", sender.tag, sender.on);
NSLog(@"switch states array value: %d", [[statiSwitch objectAtIndex:sender.tag] integerValue]);
}