2014年9月18日木曜日


他のアプリのiOS8版アップデートを横目に、ストア申請結果を待つ毎日です。

今日は、C(Clear)キーの話しです。


これは市販の電卓や 標準の電卓アプリにもある機能で、直前の数字入力をなかったことにします。
つまり、1080×30と入力した後に、Cキーをタップすると 1080× までしか入力されていない状態に戻ることになります。

malcの場合も同じように動きます。ただ、malcには BS(BackSpace)キーや カーソルキーもあり、「直前の数字入力」を消すだけでは 何か物足りない。。。 ということで、カーソルキーの左側にある数字を消去するという仕様にしました。 要するに、下図のような編集操作ができるということですね。(上段の状態でCを押すと、中段の状態になる。 そしてそのまま数字を打つと下段の状態になる)


このスクリーンショットは iPhoneのカメラや解像度の進化を題材にしていたりします。早くiPhone6欲しいなぁww


プログラム的には、[myTextField offsetFromPosition:toPosition:] でカーソルの位置を求め、先頭からカーソル位置までを対象にして、正規表現[0-9.]+$にマッチする文字列を空文字に置換をかけることで実現できます。 一つ注意としては、myTextFieldに置換結果をセットする前後で、右からのカーソル位置を保存して、戻してやらないといけないことです。これを怠るとカーソルが一番右端に動いてしまって、消した位置に数字を入れ直す操作がしづらくなってしまいます。
int pos = [myTextField offsetFromPosition:myTextField.beginningOfDocument  toPosition:myTextField.selectedRange.start] ;
NSRegularExpression *rex = [NSRegularExpression regularExpressionWithPattern:@"[0-9.]+$" options:0 error:nil] ;
[rex stringByReplacingMatchesInString:text options:0 range:NSMakeRange(0, pos) withTemplate:@""] ;


malcは答えだけでなく 式もメモリーしているので、式の一部の数字を変えて計算しなおすことが簡単です。 そのようなときに、BSキーだけでなく Cキーを使うと便利だと思っています。 




photo by 

Tagged: ,

0 コメント: