我有自定义UITableViewCell的tableview。单元格有UISwitch
个控件。我已将单元格添加到表视图控制器中,并为所有开关执行相同的操作。我在UISwitch
方法中添加了cellForRowAtIndexPath
的标记值。
当用户更改开关状态时,我想确定更改了什么开关。在这里,我将对UISwitch
按钮设置操作。
- (void)viewDidLoad
{
[super viewDidLoad];
cell.switchbtn.userInteractionEnabled=YES;
[cell.switchbtn setOn:YES];
[cell.switchbtn addTarget:self action:@selector(switchToggled:) forControlEvents: UIControlEventValueChanged];
[cell.contentView addSubview:cell.switchbtn];
}
这里我设置了uiswitch的标签值
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellidentifier=@"cellid";
cell=[tableView dequeueReusableCellWithIdentifier:cellidentifier];
if (!cell)
{
[[NSBundle mainBundle] loadNibNamed:@"cellid" owner:self options:nil];
}
cell.switchbtn.tag=indexPath.row;
NSLog(@"btn tag=%d",cell.switchbtn.tag);
return cell;
}
这里我调用switchToggled:方法来获取uiswitch状态。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
{
[self switchToggled:cell.switchbtn];
}
我正在获取标记值,每次状态为On。即使状态为关闭。
- (void) switchToggled:(UISwitch *)sender {
UISwitch *mySwitch = (UISwitch *)sender;
NSLog(@"tag ==%@",mySwitch);
if ([mySwitch isOn]) {
NSLog(@"its on!");
} else {
NSLog(@"its off!");
}
}
答案 0 :(得分:1)
使用具有直接Cell属性的CGpoint来识别选择哪一行,并且您可以轻松识别该单元的Uiswitch状态甚至更准确,这是我正在使用的一种方法,它对我来说很好。
- (void)switchToggled:(id)sender
{
CGPoint switchPositionPoint = [sender convertPoint:CGPointZero toView:[self tableName]];
NSIndexPath *indexPath = [[self tableName] indexPathForRowAtPoint:switchPositionPoint];
BusinessHoursCell *cell = (BusinessHoursCell*)[self.tableName cellForRowAtIndexPath:indexPath];
int tag=indexPath.row;
if (tag==0)
{
if (cell.workingDaySwitch.on)
{
NSLog(@"its on!");
}
else
{
NSLog(@"its off!");
}
}
}
答案 1 :(得分:0)
我使用以下方案:
在cellForRowAtIndexPath中:..将当前indexPath设置为cell。使用类似- (void)cellAtIndexPath:(NSIndexPath *)path changedSwitchStateToState:(BOOL)state
的方法创建协议,为单元格创建控制器委托。 Cell通过调用该委托方法处理开关状态更改。
在控制器中,你应该为dataSource(可能是自定义类)使用一些东西,它存储用于配置单元格的对象,并且有一个类似于- (void)changeSwitchStateToState:(BOOL)state atIndexPath:(NSIndexPath *)path
的方法,它获取相应的对象并更新状态。