更改哪个开关的问题(UISwitch作为附件类型)

时间:2011-07-26 03:44:57

标签: iphone uitableview uiswitch

我需要帮助确定哪个附件类型开关已更改。

我在UITableView中有一个游戏列表。我添加了一个UISwitch作为附件类型,每个开关对触摸作出反应,改变其状态并通知其动作接收器。

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


UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:@"cell"];
if(nil == cell){
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"cell"]autorelease];

}


Games *games=[appDelegate.hidden objectAtIndex:indexPath.row];
cell.textLabel.text = games.gameName;

//the switch is defined here, as is its target-action

testSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(0.0, 0.0, 74.0, 27.0)];
[testSwitch addTarget:self action:@selector(button_Clicked:)
     forControlEvents:UIControlEventValueChanged];

//If I used the tags
    testSwitch.tag=indexPath.row;

[testSwitch setOn:YES];
cell.accessoryView=testSwitch;


[games release];

return cell;
}

目标行动:见评论

- (void)button_Clicked:(id)sender{
    UISwitch* switchControl = sender; //if I make this an int, the switches 
                //have different numbers.  If it's cast as a string, it's gobbledegook.

//This always returns 0.  I can't tell it it's not getting anything (ie it's 
                // nil), or if the row always comes up 0.

    UITableViewCell *cell = (UITableViewCell *)[sender superview];
    NSIndexPath *x=[table indexPathForCell:cell];
    NSLog(@"%i",x.row);


}

我看到两个潜在的问题。一,我需要为每一行进行切换,唯一命名。二,我没有正确使用电池。

如果有人能看到我的错误,欢迎任何帮助。

我已经查看了我在stackoverflow上可以找到的所有内容,以及Google上5或6个不同搜索查询中的几个页面,目标操作方法中的上述两个示例是我发现的最好的。

1 个答案:

答案 0 :(得分:3)

试试这个

testSwitch.tag = indexpath.row

中设置cellForRowAtIndexPath之类的标记

然后在按钮点击事件

UISwitch *tswitch = (UISwitch *)sender;

int row = tswitch.tag;

NSlog(@"Your selected array value :%@",[your array objectatindex:row]);