我之前遇到的问题是,如果此人按下UISwitch
并点击进入另一个单元格并返回主页,则会显示所有按钮。我正在尝试更新开关,如果用户按下该开关,即使用户点击不同的单元格,它也会保持开启状态。这是我到目前为止,我认为我非常接近。问题是我不知道是什么类型的???或者我应该使用什么变量。我是采取正确的步骤还是以这种方式面对问题?我还需要reloadData
表吗?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell" forIndexPath:indexPath];
// Create a switch button on each cell
UISwitch *switchView = [[UISwitch alloc] init];
//[switchView setOn:NO animated:YES];
[switchView addTarget:self action:@selector(updateSwitch:)forControlEvents:UIControlEventValueChanged];
??? = (switchView.on) ? YES : NO;
cell.accessoryView = switchView;
return cell;
}
- (void)updateSwitch:(id)sender
{
UISwitch *switcher = (UISwitch *)sender;
if (switcher.on)
{
[switcher setOn: NO animated:YES];
??? = NO;
NSLog(@"OFF");
}
else
{
[switcher setOn: YES animated: YES];
??? = YES;
NSLog(@"ON");
}
}
答案 0 :(得分:0)
表视图中是否有多个开关?如果是这样,您将需要一个位置来存储每个交换机的状态。如果这是一个小数字,您可以为每个属性创建属性。或者,如果它是多个或未确定的数字,您可以将布尔值作为NSNumber存储在NSArray属性中。
如果您只需要跟踪一个开关值,则只需要在您的类上使用布尔属性:
@property (nonatomic, assign) BOOL switchState;
然后在你的代码中你有???你可以做点什么
self.switchState = switchView.on;
...
self.switchState = NO;
...
self.switchState = YES;
我建议不要将其命名为switchState
,而是将其命名为交换机应该代表的内容。
答案 1 :(得分:0)
您可以为所有开关分配标签,具体取决于可用的行数和数量。应用与上述Fabian相同的逻辑。将它们保存在某些数组或字典中每当加载表时你需要检查是否为ON / OFF状态。
答案 2 :(得分:0)
在这种情况下,我的建议是将cellView
和cellViewController
同时创建为UITableViewCell
类UITableView
下的自定义单元格,并将切换添加到cellView
上1}}〜
然后将updateSwitch
功能复制到cellViewController
并将其链接到cellView
中的开关
如果您想为每个单元添加功能特性并将其与表
TableViewCell.h:
@property (strong, nonatomic) IBOutlet UISwitch * switchView;
- (void)updateSwitch:(id)sender;
TableViewCell.m:
@synthesize switchView
- (void)setupCell {
//setting up your cell here,
//add your switch on cellView with Interface Builder or initialise it here
//you may add parameter here for getting data from your table view
[switchView addTarget:self action:@selector(updateSwitch:)forControlEvents:UIControlEventValueChanged];
}
- (void)updateSwitch:(id)sender
{
UISwitch *switcher = (UISwitch *)sender;
if (switcher.on)
{
[switcher setOn: NO animated:YES];
NSLog(@"OFF");
}
else
{
[switcher setOn: YES animated: YES];
NSLog(@"ON");
}
}
在tableViewControlle
r中,您将使用cellView
和cellViewController
- (UITableViewCell *)tableView:(UITableView *)tableview cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSLog(@"table loaded");
static NSString *tableViewCell = @"tableViewCell";
TableViewCell *cell = (TableViewCell *)[tableview dequeueReusableCellWithIdentifier:tableViewCell];
if(cell == nil){
// load cell view
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableViewCell" owner:self options:nil] ;
for (id oneObject in nib){
// check if the custom cell class exists
if ([oneObject isKindOfClass:[TableViewCell class]]){
cell = [(TableViewCell *)oneObject initWithStyle:UITableViewCellStyleDefault reuseIdentifier:tableViewCell];
}
}
}
[cell setupCell]; //setting up your cell here
return cell;
}
//finally add click cell event and set sender to the switch in the cell view
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
TableViewCell * cell = (TableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
[cell updateSwitch:cell.switchView];
}
如果你不想为你的桌子创建另一个自定义cellView
和cellViewController
,还有一种方法可以做到这一点...这将是一种简单而懒惰的方法如果您的桌子的单元格不那么复杂
在初始化时为单元格中的开关设置标记
switchView.tag = indexpath.row;
并在- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
中更改带标记