2013-01-05 62 views
1

我有一個標準的UITextField,我已經添加到UITableViewCell中,每當我去編輯它時,其中的文本都不會清除。我曾嘗試放置一個佔位符,並且在編輯時也不會清除。這是怎麼回事?iOS UITextField在編輯時不會清除

if (indexPath.row == 1) { 
     cell.textLabel.text = @"Device ID"; 
     cell.accessoryType = UITableViewCellAccessoryNone; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
     deviceID = [[UITextField alloc] initWithFrame:CGRectMake(115, 11, 388, 22)]; 
     deviceID.delegate = self; 
     deviceID.adjustsFontSizeToFitWidth = YES; 
     deviceID.font = [UIFont boldSystemFontOfSize:15]; 
     deviceID.textColor = [UIColor blackColor]; 
     deviceID.autocorrectionType = UITextAutocorrectionTypeNo; 
     deviceID.autocapitalizationType = UITextAutocapitalizationTypeNone; 
     deviceID.textAlignment = NSTextAlignmentLeft; 
     deviceID.clearButtonMode = UITextFieldViewModeWhileEditing; 
     deviceID.keyboardType = UIKeyboardTypeDefault; 
     deviceID.backgroundColor = [UIColor clearColor]; 
     deviceID.delegate = self; 
     deviceID.clearsOnBeginEditing = YES; 
     deviceID.text = [[NSUserDefaults standardUserDefaults] objectForKey:DEVICE_ID]; 
     [deviceID setEnabled:YES]; 
     [cell addSubview:deviceID]; 
    } 

- (BOOL)textFieldShouldClear:(UITextField *)textField { 

    return YES; 
} 
+0

你已經包含了責任到ViewController你的界面中有'UITextFieldDelegate'協議嗎? – sooper

+0

是的,我已經包括它 –

回答

4

您到時cellForRowAtIndexPath被稱爲小區追加相同的文本框的多個實例。在viewDidLoad中創建文本字段並添加到此單元格。它應該工作。

另一種方法是對UITableViewCell進行子類化,並在其方法init中添加此文本作爲屬性。然後,如果你在cellForRowAtIndexPath加入這一行,

deviceID = [[UITextField alloc] initWithFrame:CGRectMake(115, 11, 388, 22)]; 

這將調用每當表視圖重裝,你將失去以前的文本框的引用,你可以設定值cell.textField.text = @"some value";

。所以你需要確保你只創建一個文本字段並將其添加到tableview單元格中。這也將確保您在單元格中只創建單個文本字段。

+1

啊,這就是爲什麼。謝謝,我沒有想到這一點。謝謝。 –

+0

所以我可能應該只是繼承一個UITableViewCell? –

+0

@JonErickson,是的,在這種情況下更好。現在檢查我的答案。我編輯了這個建議。如果你在tableview單元格的init方法的子類中創建了這個textfield,你可以使用'cell.textField.text = @「some value」;'設置value和'cell.textField.hidden = YES;'將它隱藏在'cellForRowAtIndexPath '方法。 – iDev

1

,如果你嘗試這種委託方法是什麼:

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    [textField setText:@""]; 
} 
+0

更簡單的解決方案:) – iProgrammed

+1

這是行不通的...... –

+2

看看上面的答案,這是因爲每次表重新加載時,它重新添加子視圖,創建堆疊的UITextFields彼此。我需要繼承UITableViewCell才能實現此目的。 –

0

我發現在另一篇下面(與圖,通常情況下):

[self.view.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)]; 

並轉換成這樣:

[cell.contentView.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)]; 

完美地工作在這個線程來解決問題。

0

您可以使用此

[deviceID removeFromSuperview]; 
devideID = nil; 
deviceID = [[UITextField alloc] initWithFrame:CGRectMake(115, 11, 388, 22)]; 
... 

雖然接受的答案工作,如果你不想有委託創建的UITextField然後用這個