Меньший UIView в UIScrollView для остановки касаний

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

У меня есть самый верхний UIViewController, который содержит подкачку UIScrollingView (созданную через xib)

UIScrollingView загружает массив фиктивных контроллеров представления, которые меняются местами на различные контроллеры представления, когда пользователь пролистывает страницы.

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

В подпредставлении я разместил UIView за ползунками, частично закрывающими экран: 'uiviewblocker'

Идея состоит в том, что этот uiviewblocker поглощает любые прикосновения в непосредственной близости от ползунков, но смахивания за пределы uiview обрабатываются родительским UIViewController. Я разделил UIView 'uiviewblocker' на дубликат UIViewController 'MyView', чтобы я мог его обнаружить.

Я дошел до ...

Родительский UIScrollView:

scrollView.delaysContentTouches = NO;

Подпредставление UIViewController

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
    NSLog(@"touchesBegan");
    //[self.nextResponder touchesBegan: touches withEvent:event];   


    UIView *touchView = [[touches anyObject] view];
    if ([touchView isKindOfClass:[MyView class]]) {
         NSLog(@"funky shit");

        [super touchesBegan:touches withEvent:event];

        //[self.delegate touchesBegan:touches withEvent:event];

        //[self touchesBegain:touches withEvent:event];   // View does not respond: crashes

        //UIView *parent = self.view.superview;
        //[parent setCanCancelContentTouches:YES]; // UIView does not respond

        //UIScrollView * parentScrollView = (UIScrollView*)self.superview; // Superview not in structure

    } else {
        NSLog(@"normal shit");
    }
}

Итак, теперь я могу определить, когда пользователь касается UIview области безопасности, проверив его класс MyView, но я не могу понять, как либо сообщить родительскому UIScrollView, что нужно прервать, либо просто прикоснуться к нему тут же


person JulianB    schedule 11.11.2011    source источник
comment
PS У меня есть бритвенное решение Ocman, которое помещает массивную кнопку за ползунками, которая поглощает прикосновения, но это похоже на взлом, а не на кодирование приложения, чтобы правильно реагировать на прикосновения   -  person JulianB    schedule 11.11.2011


Ответы (2)


Поместите прозрачную UIButton за UISlider. Кнопка будет "съедать" касания и предотвращать прокрутку.

person Greg    schedule 11.11.2011
comment
Привет, Грег, это то, что я сделал ... видел мой комментарий, но я подумал, что должен быть правильный способ сделать это? - person JulianB; 14.11.2011

У меня была аналогичная проблема с моим приложением. Представление прокрутки содержало подпредставление, которое содержало собственное подпредставление. Когда появилось вспомогательное представление, прокрутка не должна была прокручиваться. Я включил уведомления, разместив их из подподпредставления и прислушиваясь к ним в контроллере представления прокрутки. Я разместил весь код в своей ветке здесь: https://stackoverflow.com/a/9010117/1007725

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

person BobbyScon    schedule 09.03.2012