在Xcode4中,我爲UITextField創建了一些佔位符文本,我希望在用戶點擊框時清除它。在水龍頭上清除UITextField佔位符文本
因此,在文本字段的屬性檢查器中,我點擊了「清除編輯開始時」,但是當我點擊文本框時它不會立即刪除文本(它只會在您開始輸入時消失)。
是否有任何方法在文本框中點擊時立即刪除佔位符文本?
在Xcode4中,我爲UITextField創建了一些佔位符文本,我希望在用戶點擊框時清除它。在水龍頭上清除UITextField佔位符文本
因此,在文本字段的屬性檢查器中,我點擊了「清除編輯開始時」,但是當我點擊文本框時它不會立即刪除文本(它只會在您開始輸入時消失)。
是否有任何方法在文本框中點擊時立即刪除佔位符文本?
讓你的ViewController文本字段的委託,並實現這兩種方法:
- (void)textFieldDidBeginEditing:(UITextField *)textField {
textField.placeholder = nil;
}
- (void)textFieldDidEndEditing:(UITextField *)textField {
textField.placeholder = @"Your Placeholdertext";
}
使用這個..
- (void)textFieldDidBeginEditing:(UITextField *)textField{
textField.placeholder=nil;
}
不要忘記添加委託的文本框到您的文件所有者。
在按鈕的動作事件把這個代碼:
txtName.placeholder = @"";
在您的.h文件中聲明函數像
-(IBAction)clear:(id)sender;
附加此功能您的達陣事件UITextField
。
-(IBAction)clear:(id)sender
{
[email protected]"";
}
你也應該檢查,如果申請文本爲空,那麼你應該把佔位再次
- (void)textFieldDidBeginEditing:(UITextField *)textField {
textField.placeholder = nil;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
if ([textField.text isEqualToString:@""] || [[textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0))
{
[textField setText:@""];
textField.placeholder = @"Your Placeholdertext";
}
}
由馬蒂亞斯·鮑赫提供的解決方案效果很好,但什麼當你有多個UITextField
擔心會發生?現在您必須確定textFieldDidEndEditing:textField
(可能通過使用標籤屬性)引用哪個UITextField
,並且會導致更多不必要的代碼和邏輯。
一個更簡單的解決方案:只需爲佔位符文本指定一個清晰的顏色,並在完成編輯後恢復爲原始顏色。通過這種方式,您的textFieldDidEndEditing:textField
不必識別textField
以在Bauch的解決方案中將相應的文本取消後對其進行回退。
- (void)textFieldDidBeginEditing:(UITextField *)textField {
[textField setValue:[UIColor clearColor] forKeyPath:@"_placeholderLabel.textColor"];
}
- (void)textFieldDidEndEditing:(UITextField *)textField {
[textField setValue:[UIColor placeholderColor] forKeyPath:@"_placeholderLabel.textColor"];
}
- (void)textFieldDidBeginEditing:(UITextField *)textField{
textField.placeholder=nil;
}
文本框的委託做佔位符值爲零
的@etayluz的解決方案是更好的(我認爲),因爲你不需要再擔心分配placeholder'a文本。 如果你在你的應用程序的不同地方風俗文本框,並希望他們同樣表現(因爲我需要在我的情況),您可以將此代碼添加到您的自定義文本域的類:
class CustomTextField: UITextField, UITextFieldDelegate {
private func setup() {
//do additional setup like attributedPlaceholder, inset, etc.
self.delegate = self
}
override func awakeFromNib() {
super.awakeFromNib()
setup()
}
// MARK: UITextFieldDelegate methods
func textFieldDidBeginEditing(textField: UITextField) {
textField.setValue(UIColor.clearColor(), forKeyPath: "_placeholderLabel.textColor")
}
func textFieldDidEndEditing(textField: UITextField) {
textField.setValue(UIColor.lightGrayColor(), forKeyPath: "_placeholderLabel.textColor")
}
}
但是,如果你需要有具體UITextFieldDelegate的方法單獨文本框,你確實需要單獨實現這個邏輯吧:
class LoginViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var emailTextField: CustomTextField!
@IBOutlet weak var passwordTextField: CustomTextField!
override func viewDidLoad() {
super.viewDidLoad()
textFields = [emailTextField, passwordTextField]
for textField in textFields {
textField.delegate = self
}
// MARK: UITextFieldDelegate methods
func textFieldDidBeginEditing(textField: UITextField) {
textField.setValue(UIColor.clearColor(), forKeyPath: "_placeholderLabel.textColor")
}
func textFieldDidEndEditing(textField: UITextField) {
textField.setValue(UIColor.lightGrayColor(), forKeyPath: "_placeholderLabel.textColor")
}
}
在SWIFT 3的情況下或更高版本
func textFieldDidBeginEditing(_ textField: UITextField) {
textField.placeholder = nil
}
func textFieldDidEndEditing(_ textField: UITextField) {
textField.placeholder = "Text Placeholder"
}
在您必須檢查文本字段具有空值或沒有第二個方法是什麼? – KingofBliss 2011-12-16 10:43:01
都能跟得上。如果有「常規」文本,佔位符文本就不可見。 – 2011-12-16 10:46:01