我正在尝试在单独的UITextField
上显示对UILabel
所做的更改。有没有办法在用户键入的每个字符后捕获UITextField
的全文?目前我正在使用此方法,但它不捕获用户输入的最后一个字符。
我知道UITextView
有“didChange”方法,但我找不到UITextField
的方法。
//does not capture the last character
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
[self updateTextLabelsWithText: textField.text];
return YES;
}
如何在输入每个字符后从UITextField中取出文字?
谢谢!
答案 0 :(得分:140)
UITextField
和UILabel
添加到storyboard / nib IBOutlet
分配UILabel
(此处我使用 myLabel )UITextFieldDelegate
分配给文件所有者,同时在.h文件中实现相同的代理使用以下代码行:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
[self updateTextLabelsWithText: newString];
return YES;
}
-(void)updateTextLabelsWithText:(NSString *)string
{
[myLabel setText:string];
}
希望这有帮助。
答案 1 :(得分:69)
只需处理"编辑已更改"事件
[textField addTarget:self
action:@selector(editingChanged:)
forControlEvents:UIControlEventEditingChanged];
和选择器:
-(void) editingChanged:(id)sender {
// your code
}
您可以手动执行此操作,也可以通过CTRL拖动"编辑已更改"将事件发送到.h,为您创建editingChanged方法。
答案 2 :(得分:5)
在Swift 2.0 +中
class CheckInViewController: UIViewController, UITextFieldDelegate {
override func viewDidLoad() {
super.viewDidLoad()
yourTextField.delegate = self
}
func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {
var updatedTextString : NSString = textField.text as NSString
updatedTextString = updatedTextString.stringByReplacingCharactersInRange(range, withString: string)
self.methodYouWantToCallWithUpdatedString(updatedTextString)
return true
}
}
希望它可以帮助你迅速开拓者
答案 3 :(得分:5)
使用addTarget Swift 2.0 +快速加载
titleTextField.addTarget(self, action: #selector(textFieldTyping), forControlEvents: .EditingChanged)
并实施selector
func textFieldTyping(textField:UITextField)
{
//Typing
}
答案 4 :(得分:1)
在Swift 3.0中:
其中一些解决方案落后于一个角色,或者早期版本的Swift和Obj-C。这是我正在使用的Swift 3.0
在课程中,我宣布了一个占位符来存储文本。
var tempName = ""
在ViewDidLoad中我用过:
nameField.addTarget(self, action: #selector(typingName), for: .editingChanged)
然后我做了一个名为:
的函数 func typingName(textField:UITextField){
if let typedText = textField.text {
tempName = typedText
print(tempName)
}
}
答案 5 :(得分:0)
Swift 3.0+:这对我来说效果非常好。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
self.yourLabel.text = "\(textField.text ?? "")\(string)"
return true
}
答案 6 :(得分:0)
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField == yourTextFieldOutletName
{
if yourTextFieldOutletName.isEmpty == false
{
youtlabelname.text = yourTextFieldOutletName.text!
}
}
return true
}
func textViewDidEndEditing(_ textView: UITextView) {
if textField == yourTextFieldOutletName
{
if yourTextFieldOutletName.isEmpty == false
{
youtlabelname.text = yourTextFieldOutletName.text!
}
}
}