所以我创建了一个自定义的TableViewCell,在笔尖中我放了一个UISwitch
。在我把它连接到任何东西之前,如果我在模拟器中运行它并单击它,它将从动画等关闭切换到打开。
我正在尝试添加一个功能,当某个条件为真时,只允许用户从关闭更改为开启。我希望如此,当用户触摸开关时,它会检查条件是否为真,如果不是,则开关不会移动。
我设置了IBAction
,如果用户触摸内部,它将运行我的功能。我的功能是:
if([on_switch isOn])
{
if([my_switch canSwitchOn])
{
NSLog(@"SWITCHED ON SUCCESSFULLY");
[on_switch setOn:TRUE animated:TRUE];
}
else
{
NSLog(@"SWITCHED ON UNSUCCESSFULLY");
//Put in popup here
}
}
else
{
[[ClassesSingleton sharedSingleton] classSwitchedOff:cell_index];
[on_switch setOn:FALSE animated:TRUE];
}
然而,无论我做什么,那个开关都会翻转,即使我没有指示这样做。我很确定这是自动翻转导致它甚至在我连接它之前就这样做了。有没有办法把它关掉?
谢谢!
答案 0 :(得分:3)
您需要做的是在userInteractionEnabled
上将UISwitch
属性设置为False。
如果你已经在Interface Builder中建立了一个你所拥有的IBOutlet
连接,你可以在这样的代码中设置它:
mySwitch.userInteractionEnabled = NO;
您还可以通过选中复选框直接在Interface Builder中设置属性,如下所示(但是在您的应用中,无论如何,您都需要将按钮连接到IBOutlet
以实现条件逻辑。)
alt text http://www.clixtr.com/photo/ef06c1f7-8cca-40cd-a454-5ca534ceb9fe
答案 1 :(得分:1)
我认为您需要以下内容:
// Somewhere just after the creation of _switch
[_switch addTarget:self action:@selector(switchValueDidChange:) forControlEvents:UIControlEventValueChanged];
// Target/Action method
- (void)switchValueDidChange:(UISwitch *)sender {
if(sender.on && [self canSwitchOn] == NO){
[sender setOn:NO animated:YES];
// Popup
}
}
你遇到的问题是交换机已经在接触状态下提交了状态。如果不是这种情况(我不确定,从未测试过),您必须检查开关当前是否不。当不允许用户切换开关时,这段代码将恢复状态。
更好的方法是禁用控件,但在这种情况下可能不是你想要的。