题
所以我创建了一个自定义的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];
}
但是,无论我做什么,该交换机将翻转,即使我给它没有指示进行操作。我敢肯定它的自动翻转导致它这样做,我已经迷上任何东西给它,甚至之前。有没有办法把它们关掉?
谢谢!
解决方案
您需要做的是设置userInteractionEnabled
属性设为False您UISwitch
什么。
如果您有媒体链接发在Interface Builder你在你所属的类delared的IBOutlet
连接,你就可以将其设置在这样的代码:
mySwitch.userInteractionEnabled = NO;
您也可以设置该属性直接在Interface Builder中选择相应的复选框,如下图所示(但是在您的应用程序,你将需要多达连线按钮的IBOutlet
反正来实现你的条件逻辑。)
替代文本http://www.clixtr.com/photo/ef06c1f7- 8cca-40CD-a454-5ca534ceb9fe
其他提示
我想你会需要像下面这样:
// 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
}
}
您遇到的问题是,交换机已经承诺它是在状态上的触摸起来。当这种情况并非如此(我不知道,从来没有测试),你必须检查开关是否是当前的不是。的代码,该位将恢复的状态,当用户不允许以切换开关。
有一个更好的办法是禁用的控制,但也许这不是你在这种情况下,想要的东西。
不隶属于 StackOverflow