2009-12-18 22 views
1

當Touch發生時,您能捕獲TextField事件嗎?到目前爲止,我沒有看到Touch事件被註冊到TextField。例如,執行touchesBegan for UITextField

* (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 

{ 
UITouch *touch = [event allTouches] anyObject; 

if (touch view == TextFieldView) { 
do somthing..... 
} 

這是一個僞代碼,我想要實現什麼是我想要的是,當用戶觸摸的文本字段一段時間被解僱的方法。 如果是,比如何?

對此有所啓發。

Thnx提前。

+0

請更多代碼。使用touchesBegan運算符顯示類的@implementation - > @ end的相關位,以及您認爲Cocoa告訴Cocoa您想要調用touchesBegan方法的代碼行(例如創建文本字段?)。您可能還想閱讀關於如何將所有代碼格式化爲屏幕上的代碼的常見問題解答。更容易閱讀的問題更容易回答。 – martinr 2009-12-18 13:40:19

+0

對不起,這是「touchesBegan方法」而不是「運營商」。並且其他人能否對UITextField是否可以分類是肯定的或否定的? – martinr 2009-12-18 13:43:15

回答

2

我只是測試這一點。

@interface TouchTestTextField : UITextField {} 
@end 

#import "TouchTestTextField.h" 
@implementation TouchTestTextField 

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    NSLog(@"touchesBegan"); 
    NSLog(@"touches=%@,event=%@",touches,event); 
} 

@end 

它很容易捕獲的觸摸和顯示文本字段作爲觸摸的視圖。

+0

我接受,但這裏的情況是,我有一個textviews內滾動視圖 – 2009-12-19 04:38:28

+0

Scrollviews是一個問題。他們會通過觸摸來決定他們是否應該滾動,以便他們不會像其他視圖那樣通過子視圖。我認爲這個問題已經在STO上解決了。你應該搜索scrollview觸摸。 – TechZen 2009-12-19 15:02:50

+1

這不再適用於Xcode 7/iOS 9。 – 2016-01-21 00:51:51

1

您可以嘗試在父視圖中覆蓋[parentView hitTest:withEvent:],並在應用/用戶界面處於適當狀態時爲每個觸摸基礎處理textField的觸摸處理。

我認爲觸摸的所有touchesMoved/Canceled/Ended事件然後轉到父級,而不是文本字段,直到下一次觸摸。但測試它並看看。

編輯

或者乾脆設置userInteractionEnabled = NO,當你想家長來處理,而不是觸摸的文本字段並將其設置爲= YES,當你想在文本字段來處理觸摸。請參閱iPhone應用程序編程指南中的「事件處理」部分。

5

上的UITextField在IB右鍵單擊並通過編寫的UITextField子類的子類,捕捉觸摸觸及事件鏈接到需要的IBAction爲

+0

當用戶從文本框中刪除觸摸時將調用什麼方法 – 2009-12-19 04:40:09

+0

非常簡單而有效的解決方案。謝謝。 – 2010-11-11 19:21:17