use*_*961 111 objective-c uitextfield ios
我正在使用下面的代码尝试textField2让textField1用户输入时更新文本内容以匹配textField1.
- (BOOL) textField: (UITextField *)theTextField shouldChangeCharactersInRange: (NSRange)range replacementString: (NSString *)string {
if (theTextField == textField1){
[textField2 setText:[textField1 text]];
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我观察到的输出是......
当textField1为"123"时,textField2为"12"
当textField1为"1234"时,textField2为"123"
......当我想要的是:
当textField1为"123"时,textField2为"123"
当textField1为"1234"时,textField2为"1234"
我究竟做错了什么?
Vla*_*mir 269
-shouldChangeCharactersInRange在文本字段实际更改其文本之前调用,这就是您获取旧文本值的原因.要在更新后使用以获取文本:
[textField2 setText:[textField1.text stringByReplacingCharactersInRange:range withString:string]];
Run Code Online (Sandbox Code Playgroud)
btm*_*dan 51
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString * searchStr = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSLog(@"%@",searchStr);
return YES;
}
Run Code Online (Sandbox Code Playgroud)
foc*_*ner 36
根据接受的答案,以下内容适用于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
}
Run Code Online (Sandbox Code Playgroud)
双方String并NSString有方法叫replacingCharacters:inRange:withString.但是,正如预期的那样,前者需要一个实例Range,而后者需要一个实例NSRange.的textField委托方法使用一个NSRange实例,因此,使用NSString在这种情况下.
bau*_*sic 12
在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
}
Run Code Online (Sandbox Code Playgroud)
Swift版本:
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
}
Run Code Online (Sandbox Code Playgroud)
这是你需要的代码,
if ([textField isEqual:self.textField1])
textField2.text = [textField1.text stringByReplacingCharactersInRange:range withString:string];
Run Code Online (Sandbox Code Playgroud)