別の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からテキストを取得するにはどうすればよいですか?
ありがとうございました!
UITextField
とUILabel
をストーリーボード/ 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];
}
お役に立てれば。
「編集変更」イベントを処理するだけです
[textField addTarget:self
action:@selector(editingChanged:)
forControlEvents:UIControlEventEditingChanged];
セレクター:
-(void) editingChanged:(id)sender {
// your code
}
これを手動で行うか、ストーリーボードを使用して、Ctrlキーを押しながら「編集済み」送信イベントを.hにドラッグして、editedChangedメソッドを作成します。
In 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
}
}
Swiftパイオニア
AddTargetを使用したSwift Swift 2.0+
titleTextField.addTarget(self, action: #selector(textFieldTyping), forControlEvents: .EditingChanged)
selector
を実装します
func textFieldTyping(textField:UITextField)
{
//Typing
}
Swift 3.0の場合:
これらのソリューションの一部は、1文字遅れていた、または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)
}
}
Swift 3.0+:これは非常にうまく機能しました。
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
self.yourLabel.text = "\(textField.text ?? "")\(string)"
return true
}
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!
}
}
}