19

我将如何将方法 addTarget 与 UITextView 一起使用?我知道你可以将它与 UITextField 一起使用,但我不能将它与 UITextView 一起使用。我什至无法使用 UITextView 创建动作。有没有办法做到这一点?提前致谢。

4

3 回答 3

15

根据评论中的信息,您要做的是在用户键入UITextView.

所以尝试这样的事情(我假设你有一个 UIViewController 子类,它的视图有问题中的 UITextView 作为子视图):

IBOutlet在您的视图控制器中,如果使用 IB,则创建一个UITextView,或者如果不使用,则只是一个常规参考。NSString然后是要存储文本的变量的另一个属性。

注意:确保此视图控制器符合UITextViewDelegate如下所示的协议。

@interface BBViewController () <UITextViewDelegate> //Note the protocol here

@property (weak, nonatomic) IBOutlet UITextView *textView;
@property (strong, nonatomic) NSString *userInput;

@end

然后,连接文本视图的委托:(或在 IB 中执行此操作)

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.textView.delegate = self;
}

然后,当用户与该文本视图中的文本进行交互时,它将发送正确的委托方法,您可以适当地更新您的变量。

#pragma mark - UITextViewDelegate

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

    self.userInput = textView.text;
    NSLog(@"userInput %@", self.userInput); //Just an example to show the variable updating
}
于 2013-07-07T03:14:38.783 回答
9

对于 swift 版本 3+

  1. 添加UITextViewDelegate到你的班级
  2. 像这样将委托添加到您的文本视图:
    self.mytextview.delegate = self
  3. 添加此方法:

    func textViewDidChange(_ textView: UITextView){ 
        print("entered text:\(textView.text)")    
    }
    
于 2018-02-23T12:48:06.317 回答
1

您可以使用通知实现您想要的。

//Listen to notifications :

NotificationCenter.default.addObserver(textView,
            selector: #selector(textDidChange),
            name: NSNotification.Name.UITextViewTextDidChange,
            object: nil)

//the function called when changed

    @objc private func textDidChange() {
        ...
    }

//make sure to release to observer as well
            NotificationCenter.default.removeObserver(textView,
            name: NSNotification.Name.UITextViewTextDidChange,
            object: nil)
于 2018-08-11T08:33:30.647 回答