Cocoa touch 如果我有多个UISwitch,我怎么知道哪个是开着的?

Cocoa touch 如果我有多个UISwitch,我怎么知道哪个是开着的?,cocoa-touch,Cocoa Touch,希望一切都好 我在表视图中有22个UI开关,我在一个函数中创建了所有这些开关对象,并在表视图中设置它们 我怎么知道哪个开关是开的还是关的?我只想通过一种动作方法来实现这一点,但我不知道如何做到这一点 如果有人遇到过这个问题,请给我一些想法 谢谢, Haresh.执行类似操作的最佳方法是将每个表单元格设置为“表视图控制器”作为代理,并使用一个标记指示该单元格显示的开关-然后让每个单元格检测开关更改,并依次告诉代理具有指示ID的开关已更改。您可以将开关状态保存在NSDictionary中,由cell

希望一切都好

我在表视图中有22个UI开关,我在一个函数中创建了所有这些开关对象,并在表视图中设置它们

我怎么知道哪个开关是开的还是关的?我只想通过一种动作方法来实现这一点,但我不知道如何做到这一点

如果有人遇到过这个问题,请给我一些想法

谢谢,
Haresh.

执行类似操作的最佳方法是将每个表单元格设置为“表视图控制器”作为代理,并使用一个标记指示该单元格显示的开关-然后让每个单元格检测开关更改,并依次告诉代理具有指示ID的开关已更改。您可以将开关状态保存在NSDictionary中,由cell switch标记存储

当然,这意味着需要一个自定义的UITableViewCell类,这样您就可以将标记和委托链接存储回UITableViewController(注意,不要将此链接保留回表视图控制器)

编辑 此答案提供了您可能更喜欢的不同方法:


tableView:didSelectRowAtIndexPath:只会在您的表视图中选择行本身时触发,这听起来与您试图执行的操作不同

在创建UISlider实例的方法中,可以将这些实例作为键存储在NSMutableDictionary(使用setObject:forKey)中,并将NSNumber作为值在稍后的switch语句中使用。对于每个UISlider,通过使用类似于以下内容将目标设置为控制器中的方法,确保记录其值的变化:

[slider addTarget:self action:@selector(sliderValueDidChange:forEvent:) forControlEvents:UIControlEventAllTouchEvents];
并在控制器中设置类似于以下内容的方法:

- (void)sliderValueDidChange:(id)sender forEvent:(UIEvent *)event;
在其中,您可以使用发送器、UISlider实例的NSDictionary和NSNumber的intValue上的switch语句来确定哪个滑块的值已更改以及新值是什么


我是否可以建议使用复选标记作为附件视图,而不是打开/关闭开关?然后,您可以使用tableView:didSelectRowAtIndexPath:跟踪用户对行的选择,并在附件视图中显示选中标记(如果元素已被选中)。这可能更符合苹果的人机界面指南。

附件视图上的复选标记??????找到一个“附件”示例,但他们设置了一个按钮,并设置了选中标记按钮和取消选中标记按钮的图像。您的意思是这样说的

您的回答应该是对上述答案的评论,但是,是的,请将UITableViewCell的accessoryType设置为UITableViewCellAccessoryCheckmark以将选中标记添加到单元格中。