0

計算の結果を表示している UITextView があります。残念ながら、数値の前に負の符号があり、その数値が端に近い場合、UITextView は次のように負の符号で分割して数値をラップしています。

現在の動作:

答え = -
123456789

代わりに、次のように表示したいと思います。

答え =
-123456789

現在の動作では、ユーザーがマイナス記号を認識せず、回答を誤解するリスクがあります。

これを解決するには、回答の前に強制的に改行を入れることができますが、文字列全体が 1 行に収まる場合もあります。UITextView がマイナス記号の間で折り返されないようにする簡単な方法はありますか、または改行を強制するために自分自身を辞任する必要がありますか?

回答の最初の部分にいくつかの単語が含まれている場合があり、それ自体が改行を必要とする場合もあります。つまり、改行を強制すると、次のようになります。

計算結果

-2

ただし、その場合は、「is」という単語の隣に「-2」を付けたままにして、次のように読み上げます。

計算結果
は-2

4

4 に答える 4

0

みなさん、ありがとうございました!これは私にいくつかのアイデアを与え、問題を解決することができました。これが同様の問題を抱えている他の誰かに役立つことを願っています。まず、問題の説明をもう一度明確にするために、結果は次の形式になります。

NSString * result = [NSString stringWithFormat:@"%@ = %@", answerString, answerNumber];

UITextViewコンテンツビューの行数を計算することで(UITextViewをそのコンテンツに合わせてサイズ変更するにはどうすればよいですか?)、次のアプローチで問題を解決できました。

まず、UITextViewの行数を回答がある場合とない場合の両方で比較します。行数が異なる場合、これはUITextViewが結果を新しい行に分割することを決定したことを意味します。その場合、結果を再フォーマットして、番号の前に手動で改行を追加する必要があります。負の符号(数値の一部)は、改行の最初の文字です。

- (int) numberOfLines: (NSString *) result {

    UITextView *myTextView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 255, 0)];

    myTextView.text = result;

    CGRect frame = myTextView.frame;
    frame.size.height = myTextView.contentSize.height;
    myTextView.frame = frame;

    int numLines = myTextView.contentSize.height / myTextView.font.lineHeight;

    return numLines;
}

- (NSString *) formatResult: (NSString *) answerString answerNumber: (NSString *) answerNumber {

    NSString * resultWithoutAnswer = [NSString stringWithFormat:@"%@ = ", answerString];
    NSString * resultWithAnswer = [NSString stringWithFormat:@"%@ = %@", answerString, answerNumber];
    NSString * result = resultWithAnswer;

    if ([self numberOfLines:resultWithoutAnswer] != [self numberOfLines:resultWithAnswer]) {
        // If these are different, then UITextView has added a line break before the answer. To prevent UITextView from potentially splitting the number across the negative sign, manually add a line break to ensure that the negative sign shows on the same line as the number.
        result = [NSString stringWithFormat:@"%@ = \n%@", answerString, answerNumber];
    }
    return result;
}
于 2012-06-16T20:40:23.413 に答える
0

前にマイナス記号が付いている数字を解析して、\nその数字の前に改行 ( ) を挿入できると思います。UITextView は改行を受け入れます。私はそれらを使用しました。

数字が十分に小さい場合に同じ行に数字を保持したい場合は、数字が1行に収まるのに十分な文字数があるかどうか、または2行に移動したかどうかをプログラムで決定する、より洗練されたアプローチを考え出す必要があります。 .

于 2012-06-16T16:23:40.293 に答える
0

数値の結果を表示するには、NSNumberFormatter を使用し、数値の横に常に - 記号を付けるのが最善の方法です。

于 2012-06-16T16:32:07.043 に答える
0

2つのラベルを使用するのはどうですか?幅が特定の値を超えている場合にのみ、「1行下」の数字を持つものを配置できます...

編集: 間違いなく 2 つのラベルが必要です。それぞれに配置するテキストを決定したら、両方に「sizeToFit」を適用し、HTML のインライン要素のように流動的にレイアウトします。それ以外の場合は、一方が他方の下になります。

必要な改行ロジックが UILabel に含まれていません。自分で実装する必要があります。

(おそらく、UITextView の動作が少し異なるのでしょうか?)

于 2012-06-16T15:51:14.227 に答える