我在按钮中使用单选按钮图像(空心圆圈)来回答3个选项中的问题,3个选项是单选按钮。我已经在tableview委托方法cellforrowatindexpath中以编程方式创建了3个uibutton。如果选择了一个按钮(带有实心圆圈图像),我需要在未选中之前选择其他按钮。我在按钮点击方法中使用下面的代码。
static int _row;
- (IBAction)optionClicked:(id)sender { UIButton ** btn =(UIButton *)发件人; _row = btn.tag;
if (btn.tag == 0)
{
if(btn1On)
{
[btnrad1 setImage:[UIImage imageNamed:@"unfilled.png"]forState:UIControlStateNormal];
btn1On=FALSE;
}
else
{
[btnrad1 setImage:[UIImage imageNamed:@"filled.png"]forState:UIControlStateNormal];
btn1On = TRUE;
btn2On = FALSE;
btn3On = FALSE;
}
}
else if (btn.tag == 1)
{
if(btn2On)
{
[btnrad2 setImage:[UIImage imageNamed:@"unfilled.png"]forState:UIControlStateNormal];
btn2On=FALSE;
}
else
{
[btnrad2 setImage:[UIImage imageNamed:@"filled.png"]forState:UIControlStateNormal];
btn2On = TRUE;
btn1On = FALSE;
btn3On = FALSE;
}
}
else if (btn.tag == 2)
{
if(btn3On)
{
[btnrad3 setImage:[UIImage imageNamed:@"unfilled.png"]forState:UIControlStateNormal];
btn3On=FALSE;
}
else
{
[btnrad3 setImage:[UIImage imageNamed:@"filled.png"]forState:UIControlStateNormal];
btn3On = TRUE;
btn1On = FALSE;
btn2On = FALSE;
}
}
else
{
NSLog(@"Error");
}
}
上面的代码正在选择另一行中的按钮。就像我在第一行选择第一个选项,但它正在选择第二行按钮。 我不知道如何使用_row来检查表视图的每个单元格。
答案 0 :(得分:1)
我没试过这个,但是这里有:
为我们所有的单选按钮制作一个特殊视图。现在认为该视图中的任何按钮或控件都链接在一起。将indexPath.row放在所有视图的标记中。
然后在按钮上添加touchDown或touchUpInside方法,以便在按下按钮时调用它来处理它。就像你拥有的一样。确保此方法在您的UITableViewCell实现中。
然后当按下按钮时,获取
row = sender.superview.tag; or row = [[sender superview] tag];
现在您知道要处理的是哪一行按钮。现在你需要获得视图中所有按钮的列表,这样你就可以操作它们了,你可以用
来做到这一点。buttons = [[sender superview] subviews];
按钮现在是您的单选按钮的数组。这些是您单元格中的所有单选按钮。使用以下方式将它们全部关闭:
for ((UIButton *) button in buttons)
[button setImage:[UIImage imageNamed:@"unfilled.png"]forState:UIControlStateNormal];
然后打开被击中的按钮:
[sender setImage:[UIImage imageNamed:@"filled.png"]forState:UIControlStateNormal];
那个人正在传递给你。使用行更新内部状态设置,以通知您哪个单选按钮现在处于打开状态以及哪些单选按钮已关闭。
答案 1 :(得分:0)
正如mahboudz指出的那样,我现在明白你实际上已经选择了不同行中的按钮问题。
这可能是因为btnrad1
的每次后续调用都会覆盖变量btnrad2
,btnrad3
和-cellForRowAtIndexPath:
。即使每个按钮都明确分配,您也只能引用您创建的最后三个单选按钮。
您需要想出一种方法来维护对您创建的每个单选按钮的引用。例如,您可以使用包含按钮的NSMutableArray
子数组。外部数组的索引表示表视图中的行,子数组的索引表示各个单选按钮。