2011-08-14 75 views
8

我的應用程序有一個自定義UITableView。在其UIViewControllercellForRowAtIndexPath委託方法我實例包含多個自定義UILabels(實際上是一個子類的OHAttributedLabel)作爲內容視圖的子視圖的定製UITableViewCell對象。如何處理UILabel上的觸摸事件作爲UITableViewCell的子視圖?

我曾嘗試在標籤上設置userInteractionEnabled = YES,然後添加觸摸事件的視圖控制器,但不工作。

想法?

感謝

+0

什麼是不工作?你有沒有檢查你的觸摸程序是否有正確的觀點? – Mundi

+0

沒有什麼可檢查的,因爲觸摸方法從未被擊中。 – Bama91

回答

12
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
     UITouch *touch = [[event allTouches] anyObject]; 
     if (CGRectContainsPoint([self.site frame], [touch locationInView:self.view])){ 
     //do whatever you want 
    } 
} 

或者

UILabel *label = =[UILabel alloc]init]; 
label.userInteractionEnabled = YES; 
UITapGestureRecognizer *tapGesture = 
[[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTap)]  autorelease]; 
[label addGestureRecognizer:tapGesture]; 
+0

對於你的第一個建議......我將touchesBegan和touchesEnded事件添加到了我的UILabel子類和父視圖控制器中,但是當我觸摸標籤時,該代碼從未被擊中(我的自定義標籤上的屬性userInteractionEnabled設置爲YES )。我不確定我錯過了什麼。 – Bama91

+0

@ Bama91我不知道爲什麼觸摸事件不會打電話,我認爲你做了一些事情。有沒有辦法嘗試我的第二個建議?而不是UILabel * label = = [UILabel alloc] init];您需要使用自定義類標籤創建並添加手勢識別器。 –

+0

我的不好。在測試的幾個月前,我在父UITableViewCell的initWithStyle方法中設置了「userInteractionEnabled = NO」。在發表評論後,觸摸事件按預期工作。另外,我發現OHAttributedLabel已經在處理觸摸事件,所以我需要在我的子類中注意到這一點。 – Bama91

1

一個UILabel不是UIControl這樣你就不會得到UIControlEventTouchUpInside或類似的活動。爲什麼不使用按鈕?你可以讓它看起來完全像一個標籤。

不管你可能需要設置addTarget:action:forControlEvents:和cellForRowAtIndexPath:方法中的UIButton標籤。在該方法中,通過檢查標籤值來檢測哪個單元的按鈕被輕敲。

如果您必須使用UILabel,那麼您需要繼承它並攔截touchesBegan/touchesEnded方法(從UIResponder繼承)來自己檢測UIControlEventTouchUpInside。

+0

我使用OHAttributedLabel的子類,它本身是UILabel的子類,並添加了歸屬文本功能。正如我在上面的評論中所提到的,添加到我的子類中的touchesBegan和touchesEnded方法在觸摸標籤時不會被觸發。 – Bama91

0

我不知道這是否是同樣的問題,但...我加了一個標籤,並不能得到它來識別觸摸,我最終意識到,這是因爲我將它作爲一個子視圖,但其框架超出其父框架,因此觸摸平角破損

1

問題在OHAttributedLabel。該標籤還可處理鏈接。所以對標籤的任何點(而不僅僅是鏈接)柄敲擊必須

self.textLabel.onlyCatchTouchesOnLinks = NO; 

哪裏self.textLabel是你OHAttributedLabel。 並且不要忘記userInteractionEnabled。

0

我剛剛與使用靜態表格單元格的,我想整個小區來觸發該單元的文本框的第一個響應者設置表的問題。

我最終沒有得到利用手勢識別任何接觸之後加入透明的(自定義,空白標題)按鈕背後的標籤(觸摸禁用)和文本框。我認爲它應該以更優雅的方式工作,但它現在解決了任務,而且目標有限。 (你可以從按鈕的默認動作拖動連接)

有點醜。再次,它只是描述了文本字段背後的區域對觸摸作出反應。畢竟這是意圖。所以也許它不那麼花哨。

將保留它,直到我找到識別器未觸發的原因。

0

你可以用TTTAttributedLabel代替它。這很容易。 當你草簽的UITableViewCell,你可以委託:TTTAttributedLabelDelegate 像:

@interface MyTableViewCell : UITableViewCell<TTTAttributedLabelDelegate>{ 
    UILabel *nameLabel; 
    TTTAttributedLabel *valueLabel; 
} 

當你最初,您可以添加鏈接標籤:

[valueLabel addLinkToPhoneNumber:valueStr withRange:NSMakeRange(0, valueStr.length)]; 

所以,你可以做任何你想要的:

- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithPhoneNumber:(NSString *)phoneNumber{ 
    //do anything you want. 

} 
相關問題