2010-09-17 105 views
9

我有橫向UIScrollView這是從UIScrollView延伸和我加UIButtons水平。我只能滾動出按鈕區域,但如果我想滾動任何按鈕是火災UIControlEventTouchUpInside事件。我不想要這個。如果我點擊並且想滾動,如果我滾動,我想點擊UIControlEventTouchUpInside動作。從uibutton傳遞滾動事件到uiscrollview

憑什麼我通過滾動事件從UIButtonUIScrollView

+0

,如果你創建了一個簡單的代碼示例來說明你在做什麼,因爲在添加一個UIButton到的UIScrollView的簡單的情況下,你甚至可以拖動滾動視圖現在的位置,如果你在開始觸摸事件這將有助於按鈕。 – Yetanotherjosh 2011-04-12 08:57:30

回答

0

如果你繼承NSButton,使您的這種類型的按鈕,並覆蓋在你的子類下面你可以傳遞事件回父視圖,你的情況滾動視圖

下會使按鈕永遠觸發事件,而是全部將被父視圖處理:

- (void)touchesBegan: (NSSet *)touches withEvent:(UIEvent *)event { 
    [self.nextResponder touchesBegan:touches withEvent:event];  
} 

- (void)touchesMoved: (NSSet *)touches withEvent:(UIEvent *)event { 
    [self.nextResponder touchesMoved:touches withEvent:event]; 
} 

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

如果你想有按鈕處理這些事件之一,而不是使用

[super touchesEnded:touches withEvent:event]; 
+0

我試過了,但沒有奏效。原因是UIScrollView不響應touchesBegan,touchesMoved和touchesEnded事件。我將UIScrollView分類以確認它正在接收這些事件,但沒有對它們做任何事情。作爲替代通過觸摸事件,你可以算出touchesMoved的位置變化而改變滾動視圖contentOffset財產,但不給你任何正常的滾動行爲的平滑運動或慣性。 – arlomedia 2011-07-27 21:21:07

3

該功能已經內置的。當你有一個UIControl元素作爲滾動視圖的子視圖和觸摸事件被檢測到時,它最初傳遞給UIScrollView的。如果在一兩秒之後觸摸事件中沒有足夠的移動,它會傳遞給按鈕。

+0

我想我的按鈕漂浮在一個固定的位置,滾動內容上面,而不是與內容移動,好像他們是滾動視圖的子視圖他們會做。但是我無法使用任何其他方法正確流動觸摸事件,所以我嘗試了這種方法,並將所有按鈕分組到一個視圖中,該視圖是滾動視圖的子視圖。當scrollViewDidScroll委託方法檢測到滾動內容時,通過設置其frame.origin.x以匹配滾動視圖的contentOffset.x,我將該視圖保留在可見內容的上方。這樣可行! – arlomedia 2011-07-28 00:25:35

0

試試這個:

self.button.exclusiveTouch = YES 

工作就像一個魅力對我來說!

4

子類的UIScrollView,在- touchesShouldCancelInContentView:方法返回YES。

+0

非常感謝! :] – Jerome 2016-10-12 23:49:11

相關問題