Меньший UIView в UIScrollView, чтобы остановить прикосновения - PullRequest
2 голосов
/ 11 ноября 2011

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

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

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

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

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

Идея состоит в том, что этот 'блокировщик uiview' использует любые касания в непосредственной области вокруг ползунков, но пролистывания вне 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 прервать или просто коснуться тут же

Ответы [ 2 ]

1 голос
/ 12 ноября 2011

Поместите прозрачную кнопку UIB позади UISlider. Кнопка «съест» прикосновения и предотвратит прокрутку.

0 голосов
/ 09 марта 2012

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

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

...