2012-06-11 29 views
1

在我的程序中,我配置了一個UIView以放置在多個UIBUtton之間。這樣可以平移視圖並讓按鈕移動以及選擇按鈕本身。但是,當它位於此UIView下方時,無法選擇按鈕。有人知道如何在這些條件下配置UIButtonuserInteractionEnabled嗎?在UIVew下面的UIButton上啓用用戶交互?

+0

嘗試禁用該UIView上覆蓋按鈕的userInteraction。 –

+0

我需要'userInteractionEnabled'將該視圖設置爲'true',這樣我才能爲其添加一個'UIPanGestureRecognizer'。 – Fitzy

+0

如果此視圖是透明的,並且僅用於檢測泛手勢,那麼爲什麼不將按鈕放在視圖頂部? –

回答

0

這種技術對我有效 - 警告:我只是在它沒有編譯或nuthin中輸入它作爲出發點。

  1. 創建按鈕,並將其放置在視圖層次結構的頂部(即他們通常交互和水龍頭回應,對UIView的頂部)
  2. 在創建按鈕 - 保持對其引用在一個數組中。

    NSMutableArray * arrayOfPeskyButtons;

  3. 保持按鈕幀的記錄

    NSMutableArray* arrayOfPeskyFrames = [NSMutableArray mutableArray]; 
    for ((UIButton*)button in arrayOfPeskyButtons) 
    { 
        [arrayOfPeskyFrames addObject:[NSValue valueWithCGRect:button.frame]; 
    } 
    
  4. 當你的應用響應於UIView的一個動作 - 搖攝,或者如果您將其更改爲一個UIScrollView(可能是最好的BTW),然後將幀的按鈕相對應,以便它們看起來固定在用戶的位置上。

我已經使用這種技術來創建座標在滾動視圖之上的按鈕的「疊加」,它的工作方式非常出色。只需在scrollView委託方法中。

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 

取注意到scrollviews的偏移,並調整每個按鈕的幀的相應取決於通過按鈕的陣列的偏移滾動視圖

CGPoint offset = scrollView.contentOffset; 

迭代的和移動它們。

int index = 0; 
for ((UIButton*)button in arrayOfPeskyButtons) 
{ 
    CGRect originalFrame = [[arrayOfPeskyFrames objectAtIndex:index]CGRectValue]; 
    CGRect currentFrame = button.frame; 
    //adjust frame 
    //e.g. 
    currentFrame.origin.x = originalFrame.origin.x + offset.x; 

    button.frame = currentFrame.; 
    index++; 
} 
0

而不是更改UIButton的userInteractionEnabled的值,應該將UIView的userInteractionEnabled值設置爲UIButton的值爲no。

當UIView的userInteractionEnabled設置爲YES時,UIView會「吃光」事件。該按鈕將永遠不會收到任何事件。

+0

我知道它是這樣做的。也許我在我的問題上還不清楚。 'UIView'的'userInterActionEnabled'設置爲'true'是很重要的,所以它可以識別泛事件。 – Fitzy

相關問題