iphone中的Radiobutton

iphone中的Radiobutton,iphone,objective-c,Iphone,Objective C,我使用按钮中的单选按钮图像(空圆圈)来回答3个选项中的问题,这3个选项是单选按钮的。我在tableview委托方法CellForRowatineXpath中以编程方式创建了3个UIButton。我需要当一个按钮被选中时(带有填充圆图像),另一个按钮如果在被选中之前被取消选中。我在按钮单击方法中使用下面的代码 静态整数行 -(iAction)选项单击:(id)发件人 { UIButton**btn=(UIButton*)发送方; _row=btn.tag if (btn.tag == 0) {

我使用按钮中的单选按钮图像(空圆圈)来回答3个选项中的问题,这3个选项是单选按钮的。我在tableview委托方法CellForRowatineXpath中以编程方式创建了3个UIButton。我需要当一个按钮被选中时(带有填充圆图像),另一个按钮如果在被选中之前被取消选中。我在按钮单击方法中使用下面的代码

静态整数行

-(iAction)选项单击:(id)发件人 { 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");
}
}

上面的代码正在另一行中选择按钮。就像我选择第一行的第一个选项,但它选择的是第二行按钮。 我不知道如何使用“行”检查表视图的每个单元格。

Edit 正如mahboudz所指出的,我现在了解到您实际上在选择不同行的按钮时遇到了问题

这可能是因为变量
btnrad1
btnrad2
btnrad3
-cellforrowatinexpath:
的每次后续调用所覆盖。即使每个按钮都有明确的分配,您也只能引用您创建的最后三个单选按钮


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

我没有尝试过这一点,但下面是:

为所有单选按钮创建一个特殊视图。该视图中的任何按钮或控件现在都被视为链接在一起。将indexPath.row放入此视图的所有标记中

然后在按钮中添加触地或触地内部方法,以便在按下按钮时调用您来处理它。喜欢你所拥有的。确保此方法在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];

那一个正在传送给你。使用row更新您的内部状态设置,让您知道哪个单选按钮现在处于打开状态,哪个处于关闭状态。

我认为他在UITableView中有按钮,他的问题是当他操作一个单元格中的按钮时,另一个单元格中的按钮处于打开和关闭状态。Ohhhhhhh,听起来像是对btnrad[1-3]的引用每次调用
-cellForRowAtIndexPath:
我读了问题,并认为按钮1被单击时按钮2处于打开状态。嗨,mahboudz,你完全正确。你有解决这个问题的方法吗Hi mahboudz,你能告诉我如何抓取UIbutton的Superview使它更容易,把所有的按钮放在一个视图中,并用indexPath.row标记该视图吗。现在,当您点击按钮时,请查看superview并获取其标记,然后使用superview.SubView,它将为您提供一组按钮。现在,您可以使用上述所有按钮。