2012-05-23 16 views
18

我可能失去了一些東西,但是......TouchUpInside上的UIView兒童

我有幾個孩子UIView(一對夫婦的UILabel的和UIImageView)。我需要當用戶點擊(抽頭)來捕捉事件父UIView內的任何地方 - 在UIView或其任何子女)的可見部分。

這樣做的最好方法是什麼?

+0

您正在使用的Xcode 4? – Sirens

回答

44

您可以在Identity Inspector中更改UIView的類...使其成爲UIControl,然後您可以爲您的視圖添加一個事件UITouchUpInside - 以獲取它的點擊。

祝你好運!

編輯:這裏是一個一步一步用截圖:

的觀點... Original view - of type UIView

...當然,沒有事件。 UIView has no events you can use

回去改的UIView與UIControl和... Change UIView to UIControl

的Ta-DAA!活動! UIControl allows you to use events

鉤到UITouchUpInside事件的方法 Add event for UITouchUpInside

這是應該的樣子在接口文件 The interface of the method

這是應該看起來像在實現文件(可以,當然,用任何你想要的東西來代替伐木) The implementation of the method

+0

有人可以爲此提供代碼示例嗎? – WebOrCode

+1

@WebOrCode:我編輯了我的答案並添加了屏幕截圖,希望它有幫助。 – DarkByte

1

由於有多個選項,您必須提供更多的細節。

如果你想正常的自來水,你可以趕上標準的觸摸事件之一,看看子視圖得到了該事件。事情是這樣的:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    if(touch.view != self.mySubViewOfInterest) 
    { 
     // perform my actions 
    } 
} 

如果需要複雜的手勢識別,那麼你可以使用UIGestureRecognizer之一,並把它分配給子視圖或主視圖。

無論如何,您必須注意,所有子視圖(您希望他們捕捉事件的子視圖)必須啓用用戶交互,否則您的主視圖也會捕獲子視圖的事件,最終您將調試並調試時不知道發生了什麼。

6

可以通過讓你的父視圖手勢識別器,並確保你的孩子沒有自己的手勢識別器假死這種行爲。爲此,請向您的父母UIView添加手勢識別器,以偵聽輕敲。其中parentView是爲您的孩子的意見(UILabels/UIImageView)和handleTap含有看法是parentView實現的方法,這樣做:

UIGestureRecognizer *tapParent = [[UITapGestureRecognizer alloc]initWithTarget:parentView action:@selector(handleTap)]; 
[parentView addGestureRecognizer:tapParent]; 
[tapParent release]; 

隨着孩子的觀點並不擁有自己的手勢識別器,他們不會'吃'的姿態,所以只要你在其範圍內點擊,父視圖就會響應。

0

這適用於我

斯威夫特3

let gesture = UITapGestureRecognizer(target: self, action: selector(self.customViewClick)) 
withSender: self) 
customView.addGestureRecognizer(gesture) 


func customViewClick() { 
    print("custom view clicked!") 
    }