空のUITextFieldでバックスペースを検出する 質問する

空のUITextFieldでバックスペースを検出する 質問する

が空の状態で iPhone キーボードのBackspace/キーが押されたことを検出する方法はありますか?が空の場合にのみ、 が押されたことを知りたいです。DeleteUITextFieldBackspaceUITextField


コメントでの @Alex Reynolds の提案に基づいて、テキスト フィールドの作成中に次のコードを追加しました。

[[NSNotificationCenter defaultCenter] addObserver:self
          selector:@selector(handleTextFieldChanged:)
              name:UITextFieldTextDidChangeNotification
            object:searchTextField];

この通知は受信されます (handleTextFieldChanged関数が呼び出されます) が、Backspace空のフィールドでキーを押したときにはまだ受信されません。何かアイデアはありますか?


この質問には混乱があるようです。キーが押されたときに通知を受け取りたいBackspace。それだけです。ただし、 がUITextFieldすでに空の場合でもソリューションは機能する必要があります。

ベストアンサー1

スイフト4:


サブクラスUITextField:

// MyTextField.swift
import UIKit

protocol MyTextFieldDelegate: AnyObject {
    func textFieldDidDelete()
}

class MyTextField: UITextField {

    weak var myDelegate: MyTextFieldDelegate?

    override func deleteBackward() {
        super.deleteBackward()
        myDelegate?.textFieldDidDelete()
    }

}

実装:

// ViewController.swift

import UIKit

class ViewController: UIViewController, MyTextFieldDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        // initialize textField
        let input = MyTextField(frame: CGRect(x: 50, y: 50, width: 150, height: 40))

        // set viewController as "myDelegate"
        input.myDelegate = self

        // add textField to view
        view.addSubview(input)

        // focus the text field
        input.becomeFirstResponder()
    }

    func textFieldDidDelete() {
        print("delete")
    }

}

目的:


サブクラスUITextField:

//Header
//MyTextField.h

//create delegate protocol
@protocol MyTextFieldDelegate <NSObject>
@optional
- (void)textFieldDidDelete;
@end

@interface MyTextField : UITextField<UIKeyInput>

//create "myDelegate"
@property (nonatomic, assign) id<MyTextFieldDelegate> myDelegate;
@end

//Implementation
#import "MyTextField.h"

@implementation MyTextField

- (void)deleteBackward {
    [super deleteBackward];

    if ([_myDelegate respondsToSelector:@selector(textFieldDidDelete)]){
        [_myDelegate textFieldDidDelete];
    }
}

@end

追加するだけですマイテキストフィールドデリゲートあなたUIViewControllerUITextFields マイデリゲートself

//View Controller Header
#import "MyTextField.h"

//add "MyTextFieldDelegate" to you view controller
@interface ViewController : UIViewController <MyTextFieldDelegate>
@end

//View Controller Implementation
- (void)viewDidLoad {
    //initialize your text field
    MyTextField *input = 
     [[MyTextField alloc] initWithFrame:CGRectMake(0, 0, 70, 30)];

    //set your view controller as "myDelegate"
    input.myDelegate = self;

    //add your text field to the view
    [self.view addSubview:input];
}

//MyTextField Delegate
- (void)textFieldDidDelete {
    NSLog(@"delete");
}

おすすめ記事