Включить / выключить UIS-переключатель программно iOS - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть UISwitch, встроенный в UITableviewCell. В табличном представлении используются динамические c клетки-прототипы. Следующий код управляет действием переключателя при его выборе. Он работает хорошо, включает и выключает и запускает код. Однако, когда я программно вызываю действие кнопки, он запускает код, но не меняет выбранное положение с выключенного на включенное или наоборот. Почему бы не показать изменение переключателя ВКЛ / ВЫКЛ?

// Call button programmatically

    [self didHideFlags:self];

    - (IBAction)didHideFlags:(id)sender{
    _isOnFlag = !_isOnFlag;
    if (_isOnFlag){
        [self.flagOverlay.graphics removeAllObjects];
        [self.flagTableView reloadData];
    }else{
        NSLog(@"Option 2");
        [self updateMyFlagsWitAlert:NO];
    }
}

enter image description here enter image description here

Ответы [ 3 ]

0 голосов
/ 10 февраля 2020

Метод действия реагирует на изменение состояния коммутатора, но сам вызов метода действия не изменит состояния коммутатора.

Вам необходимо установить свойство isOn коммутатора, чтобы включить его или выключен.

0 голосов
/ 10 февраля 2020

UISwitch подклассы UIControl. Используя Interface Builder, вы фактически добавили метод действия с именем didHideFlags(_:) для события UIEvent.valueChanged с целью, равной тому, какой экземпляр реализует функцию didHideFlags(_:):

switch.addTarget(<myTarget>, action: #selector(didHideFlags(_:)), for controlEvents: .valueChanged)

Из UIControl документация ( Механизм целевого действия ):

Элементы управления используют механизм целевого действия, чтобы сообщать об интересных событиях, происходящих с вашим кодом. Механизм целевого действия упрощает код, который вы пишете, чтобы использовать элементы управления в вашем приложении. Вместо того, чтобы писать код для отслеживания сенсорных событий, вы пишете методы действий, чтобы реагировать на определенные * control элементы c. Например, вы можете написать метод действия, который реагирует на изменения в значении ползунка. Элемент управления выполняет всю работу по отслеживанию входящих событий касания и определяет, когда вызывать ваши методы.

Методы действий не несут ответственности за , вызывающее стандартное поведение a UIControl, такие как UISwitch включение или выключение. Скорее, методы действия реализуют побочные эффекты, возникающие в ответ на события.

Как Paulw11 предлагает , чтобы программно включить или выключить UISwitch, изменить его isOn свойство или вызовите его setOn(_:animated:) метод:

switch.isOn = false

или

switch.setOn(false, animated: true)
0 голосов
/ 10 февраля 2020

Создайте IBOutlet для вашего UISwitch, и когда вы вызываете действие программно, используйте его как отправителя. Или вы можете сделать это самостоятельно, когда действие инициируется, просто измените изменение выбранного состояния UISwitch вручную,

Надеюсь, это поможет.

...