iphone中的单选按钮

Posted

技术标签:

【中文标题】iphone中的单选按钮【英文标题】:Radiobutton in iphone 【发布时间】:2009-09-08 05:05:07 【问题描述】:

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

静态 int _row;

-(IBAction) optionClicked:(id)sender UIButton **btn = (UIButton*)sender; _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 来检查表格视图的每个单元格。

【问题讨论】:

【参考方案1】:

我还没有尝试过,但是这里有:

为我们所有的单选按钮制作一个特殊的视图。该视图中的任何按钮或控件现在都被视为链接在一起。将 indexPath.row 放在这个视图的所有标签中。

然后为您的按钮添加一个 touchDown 或 touchUpInside 方法,以便在按下按钮时调用您来处理它。就像你拥有的一样。确保此方法在您的 UITableViewCell 实现中。

然后当按钮被按下时,得到

row = sender.superview.tag; or row = [[sender superview] tag];

现在您知道您正在处理哪一行的按钮。现在您需要获取视图中所有按钮的列表,以便您可以操作它们,您可以使用

buttons = [[sender superview] subviews];

buttons 现在将是您的单选按钮的数组。这些是您单元格中的所有单选按钮。使用您的将它们全部关闭:

for ((UIButton *) button in buttons)
   [button setImage:[UIImage imageNamed:@"unfilled.png"]forState:UIControlStateNormal];

然后打开被点击的按钮:

[sender setImage:[UIImage imageNamed:@"filled.png"]forState:UIControlStateNormal];

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

【讨论】:

嗨 mahboudz,你能告诉我如何获取 UIbutton 的超级视图 为了更容易,将所有按钮放在一个视图中,并用 indexPath.row 标记该视图。现在,当您点击按钮时,查看 superview 并获取其标签,然后使用 superview.subviews 这将为您提供一系列按钮。您现在可以使用上述所有按钮。【参考方案2】:

编辑

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

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

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

【讨论】:

我认为他在 UITableView 中有按钮,他的问题是当他操作一个单元格中的按钮时,另一个单元格中的按钮会打开和关闭。 Ohhhhhh,听起来对 btnrad[1-3] 的引用被每次调用 -cellForRowAtIndexPath: 覆盖了 我阅读了这个问题,并认为在单击按钮 1 时按钮 2 已打开。 嗨,mahboudz,你是绝对正确的。你有解决这个问题的办法吗

以上是关于iphone中的单选按钮的主要内容,如果未能解决你的问题,请参考以下文章

Python Tkinter 中的单选按钮值

如何隐藏单选按钮列表中的单选按钮之一?

更改单选按钮选中状态时如何从单选按钮组中的单选按钮获取文本

是否可以更改android单选按钮组中的单选按钮图标

如何处理 ExpandableListView 中的单选按钮?

如何获取单选按钮值并清除表中选中的单选按钮