检测开始和停止编辑UITextView

Jos*_*ane 34 iphone editing objective-c uitextview

如何在输入UITextView(用户点击编辑它)并离开视图(用户点击以离开它)时调用一些代码?

感谢任何帮助.

knu*_*uku 40

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
Run Code Online (Sandbox Code Playgroud)

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")
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 几行示例代码会更好. (7认同)

Phi*_*ges 6

您还可以实现UITextViewDidChange委托方法.我在我的应用程序中使用下面的代码来快速记录.每当用户输入一个字符时,观察者就会从通知中心捕获这个字符并调用saveText方法.

这是如何做:

将此行添加到viewDidLoad方法:

[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(textViewDidChange:) name:UITextViewTextDidChangeNotification object:nil];
Run Code Online (Sandbox Code Playgroud)

并且这些行位于代码中的适当位置(例如处理文本视图委托方法的部分.提示:使用编译指示标记(#pragma mark - TextView委托方法):

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

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

}
Run Code Online (Sandbox Code Playgroud)