Содержимое UIScrollView, не позволяющее взаимодействовать с пользователем - PullRequest
7 голосов
/ 02 апреля 2012

У меня есть UIScrollView с включенной подкачкой, как показано ниже:

container = [[UIScrollView alloc] initWithFrame:kScrollViewFrame];
[container setDelegate:self];
[container setShowsHorizontalScrollIndicator:YES];
[container setShowsVerticalScrollIndicator:NO];
[container setClipsToBounds:YES];
[container setPagingEnabled:YES];
[container setDecelerationRate:UIScrollViewDecelerationRateFast];
[container setBounces:NO];
[container setUserInteractionEnabled:NO];
[container setCanCancelContentTouches:NO];
[container setDelaysContentTouches:NO];

В UIScrollView я добавляю несколько UIWebView и устанавливаю для их взаимодействия значение yes, например, так.

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code

        self.frame = frame;
        self.userInteractionEnabled = YES;
    }
    return self;
}

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

- (id)initWithFrame:(CGRect)frame
{
    NSLog(@"init");
    return [super initWithFrame:frame];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"touchesBegan");

    [[self nextResponder] touchesBegan:touches withEvent:event];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"touchesMoved");

    [[self nextResponder] touchesMoved:touches withEvent:event];
}

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

1 Ответ

11 голосов
/ 04 апреля 2012

Отключение взаимодействия с пользователем в контейнере эффективно отключает его и в подпредставлениях. Вы должны включить его, чтобы событие касания распространялось вниз по иерархии представления;

[container setUserInteractionEnabled:YES];

Если вы хотите отключить прокрутку в UIWebView, просто войдите в его UIScrollView

yourWebView.scrollView.scrollEnabled = NO;

Я протестировал это на своем устройстве, и я могу "пролистать" UIScrollView и выбрать текст в UIWebView.

EDIT:

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

[container setCanCancelContentTouches:YES];
...