아래 코드를 사용하여 textField2
의 텍스트 콘텐츠를 textField1
사용자가 입력 할 때마다 일치하도록 업데이트 하려고 textField1
합니다.
- (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange: (NSRange)range replacementString: (NSString *)string {
if (theTextField == textField1){
[textField2 setText:[textField1 text]];
}
}
그러나 내가 관찰 한 결과는 …
textField1이 “123”인 경우 textField2는 “12”입니다.
textField1이 “1234”인 경우 textField2는 “123”입니다.
… 내가 원하는 것은 :
textField1이 “123”인 경우 textField2는 “123”입니다.
textField1이 “1234”인 경우 textField2는 “1234”입니다.
내가 뭘 잘못하고 있죠?
답변
-shouldChangeCharactersInRange
텍스트 필드가 실제로 텍스트를 변경 하기 전에 호출 되기 때문에 이전 텍스트 값을 얻는 것입니다. 업데이트 사용 후 텍스트를 얻으려면 :
[textField2 setText:[textField1.text stringByReplacingCharactersInRange:range withString:string]];
답변
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString * searchStr = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSLog(@"%@",searchStr);
return YES;
}
답변
스위프트 3
수락 된 답변에 따라 Swift 3 에서 다음이 작동합니다 .
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let newString = NSString(string: textField.text!).replacingCharacters(in: range, with: string)
return true
}
노트
둘 다 String
와 NSString
라는 방법을 replacingCharacters:inRange:withString
. 그러나 예상대로 전자는의 인스턴스를 Range
예상하고 후자는의 인스턴스를 예상합니다 NSRange
. textField
위임 방법은 사용 NSRange
인스턴스의 사용, 따라서 NSString
이 경우에는.
답변
UITextFieldDelegate를 사용하는 대신 UITextField의 “Editing Changed” 이벤트를 사용해보십시오 .
답변
Swift (4)에서 NSString
(순수 Swift) 없이 :
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if let textFieldString = textField.text, let swtRange = Range(range, in: textFieldString) {
let fullString = textFieldString.replacingCharacters(in: swtRange, with: string)
print("FullString: \(fullString)")
}
return true
}
확장으로 :
extension UITextField {
func fullTextWith(range: NSRange, replacementString: String) -> String? {
if let fullSearchString = self.text, let swtRange = Range(range, in: fullSearchString) {
return fullSearchString.replacingCharacters(in: swtRange, with: replacementString)
}
return nil
}
}
// Usage:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if let textFieldString = textField.fullTextWith(range: range, replacementString: string) {
print("FullString: \(textFieldString)")
}
return true
}
답변
그것을위한 스위프트 버전 :
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if string == " " {
return false
}
let userEnteredString = textField.text
var newString = (userEnteredString! as NSString).stringByReplacingCharactersInRange(range, withString: string) as NSString
print(newString)
return true
}
답변
이것이 필요한 코드입니다.
if ([textField isEqual:self.textField1])
textField2.text = [textField1.text stringByReplacingCharactersInRange:range withString:string];