3

我有一個的UIButton「BN」和UIActivityIndi​​cator「人工智能」,這是按鈕(ai.center = bn.center)的上方。活動指示器上述按鈕防止點擊識別

只要人工智能是可見的,生動活潑的,我不能按下按鈕下方AI的幀而是出於我可以的範圍內的。

我必須GestureRecognition添加到人工智能或者是有沒有點擊「人工智能」一個更聰明的方法。

親切的問候。 $ H @ RKY

回答

2

你能簡單地設置ai.userInteractionEnabled = NO;嗎?無論如何,我很驚訝它啓用了活動指示器 - 這是一個標準組件還是您創建了子類?另一方面,它通常是糟糕的UI設計,它有一個被另一個視圖覆蓋的交互式元素,尤其是一個用於指示某事物「忙碌」的交互式元素,但在您的可點擊縮略圖圖像的示例中,這似乎是有道理的。

+0

給我的UIDesign。我有一組縮略圖的按鈕,從互聯網上加載。雖然這是進行中,AI是動畫,但你應該能夠按下按鈕看到全屏圖像。按鈕頁面只是預覽。 這是一個標準的UIActivityIndi​​catorView,我也很驚訝它已啓用。似乎是默認情況下。現在它很好地工作。謝謝。 – Sharky

+1

那確實有道理。我會修改我的答案! – jrturton

0

你需要重寫UIView的方法

​​

在父視圖。如果命中在按鈕內,則返回按鈕,否則返回零。這是這種方法的討論的一部分:withEvent:方法:消息發送到每個子視圖,以確定哪個子視圖 應該接收的觸摸事件

該方法通過發送 pointInside遍歷視圖層次結構。如果pointInside:withEvent: 返回YES,則遍歷子視圖的層次結構;否則,視圖層次結構的 分支將被忽略。您很少需要自己調用此方法,但您可以覆蓋以隱藏 子視圖中的觸摸事件。

編輯:

假設你有一個UIView子類包含BN和AI,可以實現這樣的

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { 
    if (CGRectContainsPoint(bn.frame, point)) { 
     return bn; 
    } 
    return nil; 
} 

這樣你的按鈕將獲得觸摸事件的方法(如果他們是否在其框架內),無論它是否在頂部。你不需要做其他事情。

+0

我幾乎在每個類中都實現了這個方法,但是它從未在任何地方調用。我需要做一些額外的工作嗎? – Sharky

+0

您應該只在父視圖中實現它,檢查它是否被調用並確定觸摸是否在按鈕上。 – jbat100

+0

讓我繼續。我的按鈕是「self.view」(UIView)的子視圖。所以「self.view」是父視圖(= superview)。所以我必須繼承UIView覆蓋方法並使用這個「customView」作爲我的self.view? – Sharky

0

使用以下材料:

首先,UIActivityIndi​​cator創建子類具有以下方法覆蓋:

@interface MyActivityIndicator: UIActivityIndicator 
@end 

@implementation MyActivityIndicator 

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { 
    return NO; 
} 

@end 

之後,使用MyActivityIndi​​cator無處不在您的項目,而不是UIActivityIndi​​cator(在NIB文件或你的代碼,取決於你在哪裏創建它)

+0

我認爲這也會起作用,但「jrturton的」答案要容易得多。 – Sharky