0

リターンキーで入力した改行を削除したい。しかし、次のことを行うと、テキストから最後の文字が削除されます。なんで?

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
{
    NSLog(@"%d  %d  %@ %@",range.location,range.length, text, [textView text]);

    if ( [text isEqualToString:@"\n"] ) {

        NSString *s = [textView text];
        s = [s substringToIndex:[s length] - 1]; // <------------

        [tvText setText:[NSString stringWithFormat:@"%@\n>>",s]];
    }
    return YES;
}

結果を次のようにしたいと思います。

>>name
>>yoda
>>                <---- cursor is moved to the right of ">>"
4

6 に答える 6

4

私はあなたがこのようなことをすることができると思います、

    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
{
    NSLog(@"%d  %d  %@ %@",range.location,range.length, text, [textView text]);

    if ( [text isEqualToString:@"\n"] ) {

        [tvText setText:[NSString stringWithFormat:@"%@\n>>",tvText.text]];
        return NO;
    }
    return YES;
}
于 2012-05-03T12:50:09.380 に答える
4

または、文字列を一列に読んだ後、それを部分文字列に入れます。

string = [string stringByReplacingOccurrencesOfString:@"\n;" withString:@""];
于 2012-05-03T12:51:49.120 に答える
3

shouldChangeTextInRangeはUITextViewDelegateの一部であり textViewで新しいテキストが変更されるに呼び出されます。したがって、これを行うことができます:

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

    return YES;
}
于 2012-05-03T13:03:10.003 に答える
2

いずれの場合もユーザーが空白のメッセージを投稿できないため、これを使用してより良い解決策を見つけてください。

//These for loops will remove the spaces and new line characters from start and end of the string

    //&&//

    NSMutableString *temp = [[NSMutableString alloc] initWithString:posttextview.text];

    //Remove spaces and new line characters from start
    for(int i = 0; i < yourtext.length; i++)
    {
        NSString *temp1 = [NSMutableString stringWithString:[temp substringWithRange:NSMakeRange(0,1)]];

        if([temp1 isEqualToString:@"\n"] || [temp1 isEqualToString:@" "])
        {
            [temp deleteCharactersInRange:NSMakeRange(0,1)];
        }

        else
        {
            break;
        }
    }

    yourtext.text = temp;

    //Remove spaces and new line characters from end
    for(int i = 0; i < yourtext.length; i++)
    {
        NSString *temp1 = [NSMutableString stringWithString:[temp substringWithRange:NSMakeRange(posttextview.text.length - 1,1)]];

        if([temp1 isEqualToString:@"\n"] || [temp1 isEqualToString:@" "])
        {
            [temp deleteCharactersInRange:NSMakeRange(posttextview.text.length - 1,1)];

            yourtext.text = temp;
        }

        else
        {
            break;
        }
    }

    yourtext.text = temp;

    //**//
于 2014-08-27T09:22:20.320 に答える
1

問題は、shouldChangeCharactersImRangeが呼び出されたときに、新しいテキストが実際にはまだ変更されていないことです(そのため、didChangeCharactersInRange ...という名前は付けられていません)。したがって、改行に遭遇した場合は、部分文字列をだまさずに、テキストビューにこれまでに含まれている文字列を保存/処理して、NOを返します。

于 2012-05-03T12:52:38.743 に答える
0

まず、UITextViewDelegateを.hファイルに追加します

@interface YourClass : UITextField <UITextFieldDelegate> {
}

次に、デリゲートメソッドを実装します

-(BOOL)shouldChangeCharactersInRange:replacementString:
于 2012-05-03T13:19:50.620 に答える