2011-12-16 66 views
21

在Xcode4中,我爲UITextField創建了一些佔位符文本,我希望在用戶點擊框時清除它。在水龍頭上清除UITextField佔位符文本

因此,在文本字段的屬性檢查器中,我點擊了「清除編輯開始時」,但是當我點擊文本框時它不會立即刪除文本(它只會在您開始輸入時消失)。

是否有任何方法在文本框中點擊時立即刪除佔位符文本?

回答

67

讓你的ViewController文本字段的委託,並實現這兩種方法:

- (void)textFieldDidBeginEditing:(UITextField *)textField { 
    textField.placeholder = nil; 
} 

- (void)textFieldDidEndEditing:(UITextField *)textField { 
    textField.placeholder = @"Your Placeholdertext"; 
} 
+0

在您必須檢查文本字段具有空值或沒有第二個方法是什麼? – KingofBliss 2011-12-16 10:43:01

+4

都能跟得上。如果有「常規」文本,佔位符文本就不可見。 – 2011-12-16 10:46:01

1

使用這個..

- (void)textFieldDidBeginEditing:(UITextField *)textField{ 
    textField.placeholder=nil; 
} 

不要忘記添加委託的文本框到您的文件所有者。

-1

在按鈕的動作事件把這個代碼:

txtName.placeholder = @""; 
0

在您的.h文件中聲明函數像

-(IBAction)clear:(id)sender;

附加此功能您的達陣事件UITextField

在.m文件

-(IBAction)clear:(id)sender 

{ 
    [email protected]""; 
} 
3

你也應該檢查,如果申請文本爲空,那麼你應該把佔位再次

- (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"; 
    } 
} 
8

由馬蒂亞斯·鮑赫提供的解決方案效果很好,但什麼當你有多個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"]; 
} 
0
- (void)textFieldDidBeginEditing:(UITextField *)textField{ 
    textField.placeholder=nil; 
} 

文本框的委託做佔位符值爲零

0

的@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") 
    } 
} 
0

SWIFT 3的情況下或更高版本

func textFieldDidBeginEditing(_ textField: UITextField) { 
    textField.placeholder = nil 
} 

func textFieldDidEndEditing(_ textField: UITextField) { 
    textField.placeholder = "Text Placeholder" 
}