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プロパティをFalseに設定することUISwitchです。

Interface BuilderIBOutletで、所有しているクラスでdelaredに接続している場合は、次のようなコードで設定できます。

mySwitch.userInteractionEnabled = NO;

IBOutlet以下に示すように、チェックボックスを選択してInterface Builderでプロパティを直接設定することもできます(ただし、アプリでは、条件付きロジックを実装する ためにボタンを接続する必要があります) 。alttext 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 に答える