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 指出的那样,我现在了解到您实际上在选择不同行中的按钮时遇到问题。
这可能是因为变量btnrad1
、btnrad2
和btnrad3
被-cellForRowAtIndexPath:
的每个后续调用覆盖。即使每个按钮都被明确分配,您也只能引用您创建的最后三个单选按钮。
您需要想出一种方法来维护对您创建的每个单选按钮的引用。例如,您可以使用 NSMutableArray
包含包含您的按钮的子数组。外部数组的索引代表表格视图中的行,子数组的索引代表各个单选按钮。
【讨论】:
我认为他在 UITableView 中有按钮,他的问题是当他操作一个单元格中的按钮时,另一个单元格中的按钮会打开和关闭。 Ohhhhhh,听起来对 btnrad[1-3] 的引用被每次调用-cellForRowAtIndexPath:
覆盖了
我阅读了这个问题,并认为在单击按钮 1 时按钮 2 已打开。
嗨,mahboudz,你是绝对正确的。你有解决这个问题的办法吗以上是关于iphone中的单选按钮的主要内容,如果未能解决你的问题,请参考以下文章