1

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

然而,无论我做什么,那个开关都会翻转,即使我没有给它任何指示。我很确定是自动翻转导致它这样做,甚至在我将任何东西连接到它之前。有没有办法关闭它?

谢谢!

4

2 回答 2

3

您需要做的是userInteractionEnabled在您的UISwitch.

如果您已经在 Interface Builder 中建立了与IBOutlet您在自己的类中声明的连接,您将能够在如下代码中设置它:

mySwitch.userInteractionEnabled = NO;

您还可以通过选中复选框直接在 Interface Builder 中设置属性,如下所示(但是在您的应用程序中,您需要将按钮连接到IBOutletanany 以实现您的条件逻辑。) alt text http:// www.clixtr.com/photo/ef06c1f7-8cca-40cd-a454-5ca534ceb9fe

于 2009-11-06T21:51:17.223 回答
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
    }
}

您遇到的问题是交换机已经提交了它在触摸时的状态。如果不是这种情况(我不确定,从未测试过),您必须检查开关当前是否打开。当不允许用户切换开关时,这段代码将恢复状态。

更好的方法是禁用控件,但在这种情况下,这可能不是您想要的。

于 2009-11-06T22:07:14.313 回答