我只是在我的单元格中添加了一个开关,我想让每个开关获取nique cell的信息并控制唯一的单元格。我的代码如下:
在cellForRowAtIndexPath
的方法中我创建了一个开关
UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero];
cell.accessoryView = switchView;
[switchView setOn:NO animated:NO];
[switchView addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
然后我写了切换方法。它一切正常,但我无法获得切换的单元格
- (void) switchChanged:(id)sender withIdentifier:(NSString*)locationName{
UISwitch* switchControl = sender;
if (switchControl.on) {
NSIndexPath *indexPath = [self.AlarmsTableView indexPathForCell:cell];
NSLog(@"the switch is on for row number: %d",indexPath.row);
}
else{
NSLog(@"switch off");
}
}
答案 0 :(得分:0)
你必须在这里使用标签的概念。 给交换机一个标签,通常是单元索引路径
switchView.tag=indexPath.row;
并在您的函数中使用标记
int switchTag=[sender tag];
这将是你的手机
NSIndexPath *myIP = [NSIndexPath indexPathForRow:switchTag inSection:0] ;
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:myIP];
答案 1 :(得分:0)
在cellForRowAtIndexPath
:
switchView.tag = indexPath.row;
在切换事件方法中执行以下操作:
UISwitch *tswitch = (UISwitch *)sender;
//tswitch.tag; is your row.
如果tableView中有一个部分,请执行以下操作:
NSIndexPath *myIP = [NSIndexPath indexPathForRow: tswitch.tag inSection:0] ;
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath: myIP];
答案 2 :(得分:0)
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
//Your SwitchView
switchView.tag = indexPath.row;
}
-(void) switchChanged:(id)sender withIdentifier:(NSString*)locationName
{
UISwitch* switchControl = (UISwitch *)sender;
if(switchControl.on)
{
//NSIndexPath *indexPath = [self.AlarmsTableView indexPathForCell:cell];
NSLog(@"the switch is on for row number: %d",switchControl.tag);
}
else
{
NSLog(@"switch off");
}
}
答案 3 :(得分:0)
我谦卑地不同意"标签" -solution。如果你只有一个部分,它确实有效,但它并不是最好的部分"溶液
你应该改为UITableViewCell的子类并在那里进行切换。然后细胞"处理"交换机,最好告诉它的委托(你自己创建,并设置为处理tableView的ViewController)
switchChangedTo:(BOOL)onOrOff forCell:(YourSubclassCell*)cell
然后,您可以通过tableView-method indexPathForCell