簡體   English   中英

點擊鍵盤上的刪除按鈕后,UiITextView文本未刪除文本

[英]UiITextView text is not deleting the text after tapping the delete button on the keyboard

我有一個名為myTextView的UITextView和一個名為charLabel的UILabel。

我使用UITextView委托方法來更新標簽,以計算剩余的字符(35個及以下)。

錯誤-我在textview中寫入文本並且標簽變為0后,我無法刪除該文本...,可以的任何數量,但是只有當我達到0 im卡住時。

這是我的代碼:

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

    self.charLabel.text = [NSString stringWithFormat:@"%lu",35 - (unsigned long)textView.text.length];
}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text1
{

    textView.text = [textView.text stringByReplacingOccurrencesOfString:@"\n" withString:@" "];
    if(textView.text.length >= 35){
        return NO;
    } else {
        return YES;
    }

}

希望得到一些幫助,謝謝!

是的, Rengers的回答是正確的。 一旦達到35個字符,您就拒絕對文本進行任何更改(即使用戶正在嘗試刪除字符)。

我沒有測試此代碼,但你應該做的是“計算”新路線是什么,用戶已添加后/刪除他的當前字符,並測量字符串的長度。

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text1
{
    NSString *newString = [textView.text stringByReplacingCharactersInRange:range withString:text1];

    if(newString.length >= 35){
        return NO;
    } else {
        return YES;
    }
}

為此,您可以使用ReactiveCoca,並且可以查看有關它們的教程。 它非常強大的庫。

如果您想繼續自己的情況,下面的代碼可以幫助您確定如何做到這一點:

@implementation yourViewController
    - (void)viewDidLoad {
        [super viewDidLoad];
        _textView.delegate = self;
    }
    - (void)textViewDidBeginEditing:(UITextView *)textView {
        [_textView setText:@""];
    }

    - (void)textViewDidChange:(UITextView *)textView {
        [_charLabel setText:[NSString stringWithFormat:@"%d",(int)(35 - textView.text.length)]];
    }

    NSString *holderString = [textView.text stringByReplacingCharactersInRange:range withString:text];

if(holderString.length > 35)
    return NO;
else
    return YES;

確保您將委托連接到self以獲得textView。

可以為您舉例說明如何在Reactive中使用:

[[self.textView.rac_textSignal
  map:^id(NSString *text) {
      return @(text.length);
  }]
 subscribeNext:^(id x) {

     int xToInt = (int)x/16;

     if (xToInt > 0)  //this provide to keep the count stable when user do "select all and delete".
            [_charLabel setText:[NSString stringWithFormat:@"%d",35 - xToInt]];

     else
         [_counterLabel setText:@"35"];

     if (xToInt > 35)
            [_charLabel setTextColor:[UIColor redColor]];
     else
         [_charLabel setTextColor:[UIColor colorWithRed:179/255.0 green:179/255.0 blue:179/255.0 alpha:1.0]];

 }];

當前,如果字符數為35或更多,則將拒絕任何更改,因為在委托方法中返回NO。

您應該在此處檢查用戶是添加字符還是刪除字符並做出相應響應。

我不確定該怎么辦,但是您應該可以通過在委托方法中記錄變量並按Delete鍵來弄清楚這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM