Как контролировать состояние UISwitch программно, а не пользователем в Objective-C? - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть UiSwitch, который я хочу отключить, чтобы пользователь включал и выключал его.Я хочу знать, когда пользователь нажимает на него, и изменять его состояние программно, если я хочу.

Этот код отключает коммутатор, но делает его блеклым.Я не хочу этого, потому что я хочу, чтобы пользователь нажал на него.

[switch setEnabled:NO];

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Вы можете сделать что-то вроде этого, основная идея - найти координаты переключателя.Если у вас есть переключатель в представлении, вы можете использовать метод hitTest:withEvent: вместо

#import "ViewController.h"

@interface ViewController ()

@property (strong, nonatomic) IBOutlet UISwitch *mySwitch;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.mySwitch.userInteractionEnabled = NO;
}

- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [super touchesEnded:touches withEvent:event];

    UITouch *touch = [[event allTouches] anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];

    if (CGRectContainsPoint(self.mySwitch.frame, touchLocation)) {
        [self.mySwitch setOn:!self.mySwitch.isOn];
    }
}

@end
0 голосов
/ 24 ноября 2018

По какой-либо причине вы можете захотеть сделать это, один из способов добиться этого, добавив UIView поверх переключателя и добавив в него распознаватель касаний для обработки касаний, затем вы можете программно включить или выключить выключатель.Рассмотрим код ниже:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    self.switchControl = [[UISwitch alloc] initWithFrame:CGRectMake(10, 100, 0, 0 )];
    [self.view addSubview:self.switchControl];
    [self.switchControl setOn:YES animated:NO];

    UIView *view = [[UIView alloc] initWithFrame:self.switchControl.frame];
    [self.view addSubview:view];

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapSwitch)];
    [view addGestureRecognizer:tap];
}

- (void)didTapSwitch {
    [self.switchControl setOn:NO animated:YES];
}
...