如果清除時它變成FirstResponder,我猜是你有@property(nonatomic)BOOL clearsOnBeginEditing設置爲YES。
也許,只要你關心創建textField,添加textField.clearsOnBeginEditing = NO; 如果您正在使用界面構建器,則在該文本框的屬性中有一個複選框。
至於爲什麼它崩潰的大部分時間......
文本屬性定義爲:@property(非原子,副本)的NSString *文本
當你分配一個值的拷貝是指它將釋放先前的值,然後複製傳入的值。
您的第一行是保持NSString對象的指針而不調用retain。所以當你調用與清晰的OfBeginEditing被調用時,它會將新值設置爲一個空的NSString,這將釋放UITextField引用的舊的NSString。由於它唯一擁有它的所有權,該釋放調用將調用NSString上的dealloc,使其無效。
然後您將其重新分配給文本屬性,在該文件屬性中嘗試複製已釋放的對象。
所以做你的方式,你將需要調用保留和釋放:
NSString *tmpTxt = [textField.text retain];
BOOL result = [textField becomeFirstResponder];
textField.text = tmpTxt;
[tmpTxt release];
但是所有你需要做的是設置clearsOnBeginEdit爲NO,你將不再需要的代碼。
來源
2010-01-16 02:50:49
Eld