我的UIViewController對其中包含的UIScrollView我簡單的故事板iPad的項目,該項目被放置在整個表面(1024×768)。我創建了3個XIB文件,它們是我的應用程序在viewDidLoad中加載的UIViews,並將它們添加到UIScrollView中。這3個XIB文件中的每一個都只包含一個UIButton。上的UIScrollView和UIView的的成分[這是擺裏面的UIScrollView]檢測觸摸事件
這是層次結構:
〜UIViewController中(UIViewControllerClass是此 UIViewController類)
~~的UIScrollView(含有3個相同UIViews)
~~~的UIView(UIViewClass是此XIB文件的文件所有者)
~~~~ UIButton的
我想,我的UIViewControllerClass意識到兩個:觸摸上的任何地方UIScrollView的組件,如果在的UIScrollView UIScrollView的被觸摸時,如果裏面的UIButton的UIView的觸摸,有信息正是按鈕被觸摸。我在UIViewClass裏面創建了IBAction,以便在UIScrollView中的UIView裏觸及UIButton,並且當我在所有元素(UIViewController,UIView和UIScrollView)上設置User Interaction Enabled = YES時,就像它應該調用這個方法。
但在這一點上我UIViewControllerClass並不知道里面的觸摸發生的UIScrollView上的UIButton。我做了這樣的觸摸識別器:
UITapGestureRecognizer *touch = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTouch)];
touch.numberOfTouchesRequired = 1;
並將其添加到UIScrollView組件。通過這種方式,我能夠在UIViewControllerClass中檢測UIScrollView組件上的觸摸事件,但觸摸UIScrollView中的UIView中的UIButton的事件處理程序不再被調用。
所以,我需要在UIViewControllerClass有這兩個信息:在UIScrollView的組件
- 觸摸作出
- 觸摸上的UIButton在UIView的是裏面的UIScrollView(如果該按鈕被感動)製成
我想,將觸摸事件識別器附加到整個UIScrollView組件並不是解決方案,因爲它會禁用我在UIViewClass中編寫的所有觸摸事件處理程序。
我認爲解決方案是以某種方式觸及哪些在UIView內部的組件UIScrollView應發送到UIViewControllerClass,但我沒有找到一種方法來做到這一點。
如果有人能幫助我,我會非常感激。提前致謝。
[編輯#1:鄭答案】
雙擊手勢必須cancelsTouchesInView選項設置爲NO!
我的情況之上,這條線解決一切問題:
touch.cancelsTouchesInView = NO;
非常感謝鄭。
非常感謝!你的這個問題與我的無關,但包含一個非常重要的行,對於我來說,我不知道UITapGestureRecognizer具有 - cancelsTouchesInView。我不知道這個選項默認設置爲YES,現在當我將它設置爲NO時,我能夠在UIScrollView上檢測到觸摸,並且如果在UIScrollView中觸摸的元素具有觸摸處理程序,那麼該處理程序正在也叫。再次感謝你,你用這條線解決了我的問題。 – uerceg