web-dev-qa-db-ja.com

UITextViewの編集の開始と停止を検出する

UITextViewに入る(ユーザーがタップして編集する)とき、ビューを離れる(ユーザーがタップして離れる)ときに、どのようにコードを呼び出すことができますか?

どんな助けにも感謝します。

34
Josh Kahane

http://developer.Apple.com/library/ios/#documentation/uikit/reference/UITextViewDelegate_Protocol/Reference/UITextViewDelegate.html#//Apple_ref/occ/intf/UITextViewDelegate

ここでは、調査するためのいくつかの便利な方法を見つけることができます。

  • textViewDidBeginEditing:
  • textViewDidEndEditing:

さらに、UITextViewを生きるためには、[yourTextView resignFirstResponder];を呼び出すアクションを実装する必要があります

Objective-Cの例

//you may specify UITextViewDelegate protocol in .h file interface, but it's better not to expose it if not necessary
@interface ExampleViewController()<UITextViewDelegate> 

@end

@implementation ExampleViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    //assuming _textView is already instantiated and added to its superview
    _textView.delegate = self;
}


//it's Nice to separate delegate methods with pragmas but it's up to your local code style policy
#pragma mark UITextViewDelegate

- (void)textViewDidBeginEditing:(UITextView *)textView {
    //handle user taps text view to type text
}

- (void)textViewDidEndEditing:(UITextView *)textView {
    //handle text editing finished    
}

@end

Swiftの例

class TextViewEventsViewController: UIViewController, UITextViewDelegate {

    @IBOutlet weak var exampleTextView: UITextView!

    override func viewDidLoad() {
        super.viewDidLoad()

        self.exampleTextView.delegate = self
    }

    func textViewDidBeginEditing(_ textView: UITextView) {
        print("exampleTextView: BEGIN EDIT")
    }

    func textViewDidEndEditing(_ textView: UITextView) {
        print("exampleTextView: END EDIT")
    }
}
40
knuku

ITextViewDidChangeデリゲートメソッドを実装することもできます。アプリで以下のコードを使用して簡単なメモをとっています。ユーザーが文字を入力すると、オブザーバーは通知センターからこれをキャッチし、saveTextメソッドを呼び出します。

方法は次のとおりです。

この行をviewDidLoadメソッドに追加します。

[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(textViewDidChange:) name:UITextViewTextDidChangeNotification object:nil];

コード内の適切な場所にあるこれらの行(テキストビューのデリゲートメソッドを処理するセクションなど)ヒント:これにはプラグママークを使用してください(#pragma mark-TextView Delegate Methods):

- (void)textViewDidChange:(UITextView *)textView{

    NSLog(@"textViewShouldEndEditing"); // Detect in log output if the method gets called
    [self saveText:nil]; // Call any method you like

}
6
Philip Borges

デリゲートを使用し、以下を使用します。

- (void) textViewDidBeginEditing:(UITextView *) textView {
    // Your code here
}
txtviewaddress.text="Address"

txtViewAddress.TextColor = UIColor.LightGray;
txtViewAddress.ShouldBeginEditing += (textView) =>
        {
 txtViewAddress.Text = "";
            txtViewAddress.TextColor = UIColor.Black;
            return true;
};
txtViewAddress.ShouldEndEditing += (textView) =>
        {
            if (textView.Text == "")
            {
                txtViewAddress.Text = " Address";
                txtViewAddress.TextColor = UIColor.LightGray;

            }
            return true;
        };
0
kevin patel