所以我创建了一个自定义的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
    }
}

您遇到的问题是,交换机已经承诺它是在状态上的触摸起来。当这种情况并非如此(我不知道,从来没有测试),你必须检查开关是否是当前的不是。的代码,该位将恢复的状态,当用户不允许以切换开关。

有一个更好的办法是禁用的控制,但也许这不是你在这种情况下,想要的东西。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top