【问题标题】:Radiobutton in iphoneiphone中的单选按钮
【发布时间】: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 来检查表格视图的每个单元格。

【问题讨论】:

    标签: iphone objective-c


    【解决方案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,你是绝对正确的。你有解决这个问题的办法吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2012-08-31
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多