在iPhone的单选按钮

时间:2009-09-08 05:05:08

标签: iphone objective-c

我在按钮中使用单选按钮图像(空心圆圈)来回答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来检查表视图的每个单元格。

2 个答案:

答案 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的每次后续调用都会覆盖变量btnrad2btnrad3-cellForRowAtIndexPath:。即使每个按钮都明确分配,您也只能引用您创建的最后三个单选按钮。

您需要想出一种方法来维护对您创建的每个单选按钮的引用。例如,您可以使用包含按钮的NSMutableArray子数组。外部数组的索引表示表视图中的行,子数组的索引表示各个单选按钮。