如何在写入文本之前清除UITextView中的先前文本?

8

我希望在写入新文本之前清除UITextView上先前写入的文本。我是这样做的。

textView.text = @"";
textView.text = @"something";

但是,之前的文本没有被清除,它与当前文本重叠。TextView是不可编辑的。


在第一行后添加 NSLog(@"Text Field Content : %@",textField.text);,输出是什么?你是通过编程方式创建textField还是使用Interface Builder? - 0x8badf00d
对不起,它是textView,而不是textField。我进行了编辑。我通过编程创建了textView。 - user698200
4个回答

9
你需要实现UITextViewDelegate和方法textViewDidBeginEditing。下面的代码在开始编辑时将textView的文本设置为""(空)。
- (void) textViewDidBeginEditing:(UITextView *) textView {
  [textView setText:@""];
}

textViewDidBeginEditing没有被调用。TextView在ViewController中。我把textView放在根viewController中,它被调用了。但是,我的viewController是被推入的viewController,它没有被调用。 - user698200
textView.delegate 设置为 self - max_

3

这里是一段 Swift 代码

func textViewDidBeginEditing(textView: UITextView) {
        txtView.text = ""
        txtView.textColor = UIColor.blackColor()
    }

func textViewDidEndEditing(textView: UITextView) {
     if txtView.text.isEmpty {
         txtView.text = "Write your comment."
         txtView.textColor = UIColor.blackColor()
     }
}

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool {
        if text == "\n"  // Recognizes enter key in keyboard
        {
            textView.resignFirstResponder()
            return false
        }
        return true
    }

注意:将委托给您的TextView


2

首先将所选范围设置为textView的整个文本:

    [textView setSelectedRange:NSMakeRange(0, textView.text.length)];
    [textView setText:@""];

就像这样:

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
    //  Make the textView visible in-case the keyboard has covered it
    [table scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:1] 
                 atScrollPosition:UITableViewScrollPositionTop 
                         animated:YES];

    // Keyboard toolbar prev/next buttons
    [nextPreviousControl setEnabled:YES forSegmentAtIndex:0];
    [nextPreviousControl setEnabled:NO forSegmentAtIndex:1];

    //
    // Erase all text in the textView before editing starts:
    // 
    [textView setSelectedRange:NSMakeRange(0, textView.text.length)];
    [textView setText:@""];
    return YES;
}

textViewShouldBeginEditing方法没有被调用。TextView位于ViewController中。我将textView放在根viewController中,它被调用了。但是,我的viewController是推送的viewController,它没有被调用。 - user698200
将以下代码放入您的 ViewController 中,该 ViewController 包含 UITextView,并放在 viewDidLoad 方法中:[textView setDelegate:self]; - chown
在您的“ViewController”的头文件中,添加此<UITextViewDelegate>,如下所示-> @interface MyViewController : UIViewController <UITextViewDelegate> { - chown
我知道如何添加委托。但是,由于某种未知的原因,该方法从未被调用。它对于根视图控制器运行良好。 - user698200
你能贴出更多表现出这种行为的代码吗?没有源代码很难进行准确的调试。 - chown
我发布了这个链接:http://stackoverflow.com/questions/7336144/why-is-viewwilldisapper-not-called。TextView位于MyViewController.h中。我认为我需要更仔细地查看。 - user698200

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接