2016-03-31 3 views
7

Я использую SevenSwitch в своем проекте. Мне нужно добавить его в UIScrollView, но кажется, что элемент управления не может получать события касания, когда я добавляю его в прокрутку.UIControll в UIScrollView не принимает события касания

Я попытался к югу причислять scrollview и переопределение ниже кода:

- (BOOL)touchesShouldCancelInContentView:(UIView *)view { 
    return NO; 
} 

также добавил:

self.scrollView.delaysContentTouches = NO; 

, но до сих пор не могу получить сенсорное событие. Как я могу остановить scrollview от предотвращения получения UIControl?

Update

У меня есть водопроводную жест на мой взгляд прокрутки, потому что я хочу, когда пользователь нажмите на вид прокрутки Я называю [self.scrollView endEditing:YES], чтобы закрыть клавиатуру. Когда я удаляю его, семь переключателей работают с краном.

добавить ниже код для моего крана жест:

tap.cancelsTouchesInView = NO; 

и теперь sevenswitch работает с краном, но есть проблемы, когда делают переключатель on или off с сенсорным трекинга.

+0

У кого-нибудь есть идеи? –

+0

Почему вы хотите, чтобы в нем было событие касания? Я сделал пробную демонстрацию этого, поставив SevenSwitch внутри scrollview, и он работает правильно (получив действие управления) без внесения каких-либо изменений. – HardikDG

+0

Я не хочу иметь событие касания. Я только хочу, чтобы он работал. Когда я добавляю его в список прокрутки, я не могу переключить его на –

ответ

3

Я сделал образец, в котором я sevenswitch внутри Scrollview и он работает правильно

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    SevenSwitch *mySwitch = [[SevenSwitch alloc] initWithFrame:CGRectZero]; 
    mySwitch.center = CGPointMake(self.view.bounds.size.width * 0.5, self.view.bounds.size.height * 0.5); 
    [mySwitch addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged]; 
    //[self.view addSubview:mySwitch]; 

    mySwitch.on = true; 

    [_cntView addSubview:mySwitch]; 

    SevenSwitch *mySwitch3 = [[SevenSwitch alloc] initWithFrame:CGRectZero]; 
    mySwitch3.center = CGPointMake(self.view.bounds.size.width * 0.5, self.view.bounds.size.height * 0.5 + 70); 
    [mySwitch3 addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged]; 
    [self.view addSubview:mySwitch3]; 

    //self.view.backgroundColor = [UIColor colorWithRed:0.19f green:0.23f blue:0.33f alpha:1.00f]; 
    mySwitch3.thumbTintColor = [UIColor colorWithRed:0.19f green:0.23f blue:0.33f alpha:1.00f]; 
    mySwitch3.activeColor = [UIColor colorWithRed:0.07f green:0.09f blue:0.11f alpha:1.00f]; 
    mySwitch3.inactiveColor = [UIColor colorWithRed:0.07f green:0.09f blue:0.11f alpha:1.00f]; 
    mySwitch3.onTintColor = [UIColor colorWithRed:0.45f green:0.58f blue:0.67f alpha:1.00f]; 
    mySwitch3.borderColor = [UIColor clearColor]; 
    mySwitch3.shadowColor = [UIColor blackColor]; 

    [_cntView addSubview:mySwitch3]; 
} 

- (void)switchChanged:(SevenSwitch *)sender { 
    NSLog(@"Changed value to: %@", sender.on ? @"ON" : @"OFF"); 
} 

В котором _cntView основной вид контейнера, который я поместил внутри Scrollview, пожалуйста, проверьте, если это работает для вас


Update

Как я уже в го е комментарий я не получаю то, что вы пытаетесь сказать с сенсорным отслеживанием, но я сделал образец с краном жестом в Scrollview, которая может помочь

UIScrollView *scrollview = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.height)]; 
    [scrollview setContentSize:CGSizeMake(self.view.frame.size.width,700)]; 
    [self.view addSubview:scrollview]; 

    SevenSwitch *mySwitch = [[SevenSwitch alloc] initWithFrame:CGRectZero]; 
    mySwitch.center = CGPointMake(self.view.bounds.size.width * 0.5, self.view.bounds.size.height * 0.5); 
    [mySwitch addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged]; 
    //[self.view addSubview:mySwitch]; 

    mySwitch.on = true; 

    [scrollview addSubview:mySwitch]; 

    SevenSwitch *mySwitch3 = [[SevenSwitch alloc] initWithFrame:CGRectZero]; 
    mySwitch3.center = CGPointMake(self.view.bounds.size.width * 0.5, self.view.bounds.size.height * 0.5 + 70); 
    [mySwitch3 addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged]; 
    mySwitch3.thumbTintColor = [UIColor colorWithRed:0.19f green:0.23f blue:0.33f alpha:1.00f]; 
    mySwitch3.activeColor = [UIColor colorWithRed:0.07f green:0.09f blue:0.11f alpha:1.00f]; 
    mySwitch3.inactiveColor = [UIColor colorWithRed:0.07f green:0.09f blue:0.11f alpha:1.00f]; 
    mySwitch3.onTintColor = [UIColor colorWithRed:0.45f green:0.58f blue:0.67f alpha:1.00f]; 
    mySwitch3.borderColor = [UIColor clearColor]; 
    mySwitch3.shadowColor = [UIColor blackColor]; 

    [scrollview addSubview:mySwitch3]; 


    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(actionSingleTap:)]; 
    singleTap.numberOfTapsRequired = 1; 
    singleTap.cancelsTouchesInView = NO; 
    [scrollview addGestureRecognizer:singleTap]; 
} 


- (void)actionSingleTap:(UITapGestureRecognizer *)sender { 
    NSLog(@"Tap"); 
} 

- (void)switchChanged:(SevenSwitch *)sender { 
    NSLog(@"Changed value to: %@", sender.on ? @"ON" : @"OFF"); 
} 

Я сделал все новый код и программно он обнаруживает событие прикосновения вне 7Switch, а также обнаруживать прикосновение/отключение на семи переключателях.
Если вы хотите сделать это сделать Scrollview в раскадровке и изменить programatic Scrollview с раскадровки розетки

+0

. Я также создаю то, что вы делаете, в новом новом контроллере представления, созданного в раскадровке. Теперь sevenswitch работает с краном, но имеет проблемы с касанием трека. Также я создаю свой прокрутки с программным обеспечением и добавлю его в представление. В этом прокрутке это не работает даже нажатием. –

+0

см. Мое обновление, пожалуйста, –

+0

@HuseinBehboodiRad так теперь это работает в вашем scrollview программно? также «touch tacking» означает, что он не работает с жестом pan/drag на переключателе? – HardikDG

1
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(actionSingleTap:)]; 
    singleTap.numberOfTapsRequired = 1; 
    [self.scrollView addGestureRecognizer:singleTap]; 
} 

- (void)actionSingleTap:(UITapGestureRecognizer *)sender { 

    CGPoint touchPoint = [sender locationInView:self.scrollView]; 
    NSLog(@"Touch point coordinates are : %f - %f", touchPoint.x , touchPoint.y); 

    UIView *hitImageView = [self.scrollView hitTest:touchPoint withEvent:nil]; 
    NSLog(@"%@", hitImageView); 

    switch (hitImageView.tag) { 
     case 1: 
      // do something 
      break; 

     default: 
      break; 
    } 

} 
+0

Работает одиночный кран. Не требуется новый жест. проблема с сохранением и отслеживанием sevenswitch. У него плохая анимация. –

2

Try СЛЕДУЮЩИХ, которые могут помочь вам

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)]; 
[scrollView addGestureRecognizer:singleTap];  

и вы получите штрихи в:

-(void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture 
    { 
    CGPoint touchPoint=[gesture locationInView:scrollView]; 
    } 

Примечание:

Вид прокрутки также имеет распознаватель жестов. По умолчанию только один распознаватель жестов может обрабатывать штрихи в любой момент времени. Вам нужно сделать себя делегатом вашего жеста, а затем реализовать gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: для возврата YES.Это позволит работать одновременно с просмотром прокрутки.

+0

Работает одиночный кран. Не требуется новый жест. проблема с сохранением и отслеживанием sevenswitch. У него плохая анимация. –

Смежные вопросы