Отключить автопереключение при нажатии на UISwitch?

StackOverflow https://stackoverflow.com/questions/1690715

  •  18-09-2019
  •  | 
  •  

Вопрос

Итак, я создал собственный TableViewCell и в перо поместил UISwitch.Еще до того, как я подключил его к чему-либо, если я запустил его в симуляторе и щелкнул по нему, он переключился из выключенного состояния во включенное с анимацией и тому подобным.

Я пытаюсь добавить функцию, в которой пользователю разрешено переключаться с выключенного состояния на включенное только при выполнении определенного условия.Я хочу, чтобы когда пользователь прикасался к переключателю, он проверял, верно ли условие, а если нет, то переключатель не двигался.

Я установил IBAction где, если пользователь Touches Up Inside, он запустит мою функцию.Моя функция такова:

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 с 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