0

Twitterに似たテキストが欲しいのですが

複数行をサポートしているため、現在UITextViewを使用しています。文字を数え、ユーザーが追加または削除された文字を最新の状態に保つラベルの使用方法を理解しました。

空:

空のフィールド

テキスト付き:

テキスト付き

ただし、ビュー内のテキストをコピーまたは貼り付けて(2番目の図のようにすべてのテキストを強調表示した場合など)、削除すると、カウンターが更新されないという問題があります。または、テキストを貼り付けると、カウントは1文字だけ減りますが、テキストフィールドの制限は正しいままですが、カウンターだけが同期しなくなります。

コード: http: //pastebin.com/UK91Ccbb

4

3 に答える 3

0

UITextViewにはデリゲートメソッドがあります。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;

UITextViewに文字が挿入されるたびに呼び出されます。このメソッドでは、カウンターUILabelのテキストの長さを次のように設定します

counterlabel.text = [NSString stringWithFormat:@"%i", textView.text.length];

長さが範囲内、つまり140以下の場合は、メソッドの最後でYESを返し、それ以外の場合はNOを返します。

更新: ..
140文字に制限します。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    return textView.text.length <= 140;

}

文字の選択とカウント時にテキストの削除を処理します。

- (void)textViewDidChange:(UITextView *)textView
{
    count.text = [NSString stringWithFormat:@"%i", (140- textView.text.length)];
}
于 2012-08-11T04:42:31.450 に答える
0
NSLog(@"You added a character");
charactersLeft--;

ここでの問題は、次のように書くべきだったということだと思います。

charactersLeft -= text.length;
于 2012-08-11T04:45:21.353 に答える
0

viewDidLoadで:

charactersLeft = 140;
characterCountLabel.text = [NSString stringWithFormat:@"%d",charactersLeft];

今これを使用してください:それはうまくいきます:

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

NSString *textString = textView.text;
int chars = [textString length];

if (chars <= 140) {
    [characterCountLabel setText:[NSString stringWithFormat:@"%d",(140 - chars)]];
}
}

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if([text isEqualToString:@"\n"])
    [textView resignFirstResponder];

if (textView.text.length == 140 && [text isEqualToString:@"\n"]) {

    [textView resignFirstResponder];
}

else if ((textView.text.length) >= 140 && range.length == 0){

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"You have exceeded the characters limit." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    [alert release];
    return NO; // return NO to not change text

}

return YES;

}

ここでは、returnTypeキーを使用してキーボードを辞任していることに注意してください。通常どおりに機能するように変更できます。

于 2012-08-11T05:21:36.423 に答える