【iOS】UItextFieldにおけるPasteの貼り付け操作に関するいくつかの小さな発見

1416 ワード

テストは私にBUGを提出しました.
どうしてこのテキスト入力ボックスを一度貼ればいいのですか.もう一度貼れば効果がありませんか.
急いでReviewコード

前提は次のとおりです。


UItextFieldはtextField:shouldChangeCharactersInRange:replacementString:を書き換えたに違いない.中はstringに対して英語のアルファベット+数字の濾過処理をしました
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:@"...."] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
if([string isEqualToString:filtered] == NO) {
    return NO;
}

省略符の中には英字+数字の文字列があります.入力したstringに文字列以外の文字が含まれている場合は、入力に失敗します.

問題はこうです。


ブレークポイントは、1回目の貼り付け時に渡されるstringに問題はなく(ここでは@「abcdef」と仮定)、2回目の貼り付け時に渡されるstringに問題があり、元の文字列の前にスペースが1つ増えて@「abcdef」になります.
これが問題です.このスペースが多いので、入力は上記の検証に合格せず、入力に失敗しました.

現象はこうです。


一定の実験を経て、この現象は広く説明されるべきだ.
前提条件:1.貼り付け操作、貼り付け内容は制限しない;2.入力方式は中国語をサポートする入力方式(中国語入力方式に切り替えることができる);3.UItextField入力ボックスが空でない
トリガ条件:2つの条件は互いに独立しており、同時にトリガすることができます.
条件1で貼り付ける位置の前を前文といい、前文は英語入力文字(@".")の場合
条件2の貼り付け位置の後ろを後文と呼び、後文は英語入力文字(例えば@".")である.の場合
トリガ現象:条件がトリガされるとstringは頭部に自動的にスペースを追加します.条件2がトリガーされるとstringは末尾に自動的にスペースを追加します.

処理は次のとおりです。


テストとコミュニケーションし、最終的にここに入力したテキストを一刀切に処理します.すなわち、スペースを統一的に削除して表示します.例えば@「sdf uio」を貼り付けると@「sdfuio」と表示されます
このような処理は,stringに貼り付けられたスペースが自身が持つものなのか貼り付けられたものなのかを区別する方法がしばらく考えられなかったためである.
間違いがあればご指摘ください