2009-10-23 92 views
1

我在我的UITabBar正上方的另一個視圖中有一個自定義按鈕。看起來UITTabBar上方有一個隱藏的「命中區域」,它阻止我在另一個視圖中擊中我的自定義按鈕的下半部分。按鈕子視圖位於所有其他視圖的頂部,包括自定義UITabBar。UITabBar/UIToolBar重疊問題(iphone sdk)

在模擬器中使用UICatalog示例代碼很容易注意到這種效果。前往工具欄部分。將鼠標光標放置在底部工具欄項目上方約5-10個像素處,然後單擊以查看您是否可以觸發按鈕上方的觸摸事件方式。

我需要弄清楚如何將這個命中區域限制在uitoolbar或uitabbar本身的範圍內,而不是讓iPhone做出任何可觸及的無障礙魔法。我認爲我已經用盡了所有選項:\我認爲clipsToBounds(在UITabBar上)會做的,但顯然不是。

而且我這樣做完全是代碼,所以沒有Interface Builder中......

+0

嗨 - 你有沒有解決呢?我有同樣的問題... –

回答

1

對於任何人誰絆倒過這個問題,我有一個解決方案,但它屬於早已進入「骯髒的黑客」領土,並且可能會破壞更新的(比3.0)iPhone操作系統版本... 在您的危險中使用!

我創建中的UITabBar一樣類別與hitTest:withEvent:實現,並且注意到,當我在此方法中,所述的x,y值在所提供的CGPoint結構是相當奇怪的主體中設置斷點 - 在〜15像素觸摸時或因此,在標籤欄上方的值看起來像(x = 23.482749,y = 12.938475),而如果您在標籤欄內觸摸,則值會很好地四捨五入到最接近的整數,例如(x = 23,y = 12)。

現在,由於某種原因,我期待在標籤欄上方的~15px「命中區域」中觸及y軸爲負值(這就是爲什麼我首先開始了這條路徑),但唉,沒有。您可以在兩個不同的地方觸摸並獲得類似的座標,如上例所示。因此,我的「解決方案」:我依靠標籤欄本身的觸摸始終具有y軸的整數四捨五入的值,否則我假設它位於標籤欄上方的重疊區域中。我對此進行了很長一段時間的測試,並且似乎始終如此。

代碼:

@implementation UITabBar (Me) 

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event 
{ 
    if ([[NSString stringWithFormat:@"%.6f", point.y] hasSuffix:@".000000"]) 
    { 
    return [super hitTest:point withEvent:event]; 
    } 
    else 
    { 
    return nil; 
    } 
} 

@end 
+0

不會是我第一次骯髒破解我的方式通過iphone-sdk的問題:P 無論如何,它的工作,以防止觸摸上方的標籤酒吧觸發標籤欄,但它仍然不允許接觸到該空間中的其他物品。 (添加一個按鈕或一個表格單元格,你會看到你不能觸摸它們) – psy

+0

是的,我注意到了這一點,儘管對我來說這不是問題。 而不是在else分支中返回nil,您可以在新的「死區」下找到視圖並返回該視圖 - 我會想象一下很多樂趣。 –

+0

是的,不,我總是在那個地方有一個按鈕,所以在上面的else語句中,我將按鈕發送給touch up事件。不是最優的,但它現在會做。 – psy