2013-10-06 3 views
0

Я пытаюсь создать простой UIScrollView с пейджингом для горизонтальной прокрутки между 3-мя изображениями. Сложная часть заключается в том, что я хотел бы, чтобы каждое изображение было доступно для кликов и захватывало событие click.UIScrollView не прокручивается при добавлении UIButtons в качестве подзаголовков

Моя техника состоит в том, чтобы создать 3 UIButtons, каждая из которых состоит из UIImage. дать каждой кнопке тег и установить действие.

Проблема: я могу поймать событие щелчка - НО НОТА это прокручивается!

Вот мой код:

- (void) viewDidAppear:(BOOL)animated { 

    _imageArray = [[NSArray alloc] initWithObjects:@"content_01.png", @"content_02.png", @"content_03.png", nil]; 

    for (int i = 0; i < [_imageArray count]; i++) { 
     //We'll create an imageView object in every 'page' of our scrollView. 
     CGRect frame; 
     frame.origin.x = _contentScrollView.frame.size.width * i; 
     frame.origin.y = 0; 
     frame.size = _contentScrollView.frame.size; 

     // 
     //get the image to use, however you want 
     UIImage* image = [UIImage imageNamed:[_imageArray objectAtIndex:i]]; 

     UIButton* button = [[UIButton alloc] initWithFrame:frame]; 

     //set the button states you want the image to show up for 
     [button setImage:image forState:UIControlStateNormal]; 
     [button setImage:image forState:UIControlStateHighlighted]; 

     //create the touch event target, i am calling the 'productImagePressed' method 
     [button addTarget:self action:@selector(imagePressed:) 
     forControlEvents:UIControlEventTouchUpInside]; 
     //i set the tag to the image #, i was looking though an array of them 
     button.tag = i; 

     [_contentScrollView addSubview:button]; 
    } 

    //Set the content size of our scrollview according to the total width of our imageView objects. 
    _contentScrollView.contentSize = CGSizeMake(_contentScrollView.frame.size.width * [_imageArray count], _contentScrollView.frame.size.height); 

    _contentScrollView.backgroundColor = [ENGAppDelegate backgroundColor]; 
    _contentScrollView.delegate = self; 
} 
+0

Вы прошли через свой код, чтобы убедиться, что _contentScrollView.contentSize - это то, что вы ожидаете? Я думаю, что _contentScrollView.frame.size не вычисляется должным образом в этот момент, поэтому вы не получите хорошего значения. – HalR

+0

Я проверил и рассчитан правильно! позвольте мне сказать следующее: если я запустил кнопку без рамки (так картинки не отображаются), то я вижу, что она прокручивается! – Shvalb

+0

Возможно ли, что если я установил рамку кнопки точно такого размера, как ScrollView, тогда она полностью блокирует свиток, поэтому я не получаю событие прокрутки? – Shvalb

ответ

1

Ну, так как UIButton является UIControl подклассом, он "съедает" прикасается ваша точка зрения прокрутки:

[UIScrollView touchesShouldCancelInContentView:] по умолчанию возвращаемого значения YES если view не является объектом UIControl; в противном случае он возвращает NO.

(от https://developer.apple.com/library/ios/documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html#//apple_ref/occ/instm/UIScrollView/touchesShouldCancelInContentView :)

Вы могли бы влияния этого с помощью подклассов UIScrollView и перезаписи touchesShouldCancelInContentView: (и/или touchesShouldBegin:withEvent:inContentView:). Однако для вашего случая использования я бы не использовал кнопки в первую очередь. Почему бы просто не добавить распознаватель жестов к экрану прокрутки и использовать точку касания, чтобы определить, какое изображение было использовано? Это намного проще и должно работать без каких-либо проблем.

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