UITextFieldの入力を受け取る時。(日本語に限る問題)
ちょっと設計のミスで。。笑
UITextFieldの値を
string = textField.text;
これで正確にとれない事が起きてしまいました。
問題は、テーブルビューのセルにtextFiledを貼付けたので
キーボードを下げるなりのメソッドを呼ばない限り、”日本語に限って”
string = textField.text;
こんな文では値がちゃんととれないのです。
それはなぜか?
日本語は変換という機能(?)がある訳で、
目に見えてる時は「だ」というように入力が終わっているのに、
実際は ”da”として textField.textに記憶されている訳なのです。
- (void)textFieldDidEndEditing:(UITextField *)textField
これが呼ばれた時点で、「da」が「だ」になります。
なので、私は
[textField resignFirstResponder];
これを呼び出してから、
string = textField.text;
これをすく事で解決しました。
UIScrollViewはxibを修正するだけでは制御できないんかな。。。
なぜかプログラムでわざわざ上に載っているビューのフレームを
コンタクトサイズにセットしないと、スクロールしないのだ。。。
インタフェースビルダーで、ちゃんとスクロールビューを置いて、その上にサイズの大きいビューを載せたのに。。
なんか間違っているのかもしれないけど。。。
なぜか出来なかったので、setContactsize (?)みたいなuiscrollviewのメソッドを呼び出して解決した。
コンタクトサイズにセットしないと、スクロールしないのだ。。。
インタフェースビルダーで、ちゃんとスクロールビューを置いて、その上にサイズの大きいビューを載せたのに。。
なんか間違っているのかもしれないけど。。。
なぜか出来なかったので、setContactsize (?)みたいなuiscrollviewのメソッドを呼び出して解決した。
ラベルが大きいと、文字の位置が中途半端な所に表示される。。。
なので、それを解決する為の方法です。
これより楽な方法もあればいいんですけどね。
例えばラベルのframeのheightが200だとすると、
ラベルに@"あはは"っていう文字を入れると
大体100ぐらいの真ん中の位置に文字が表示されるんですね。
それをtextFiledのように、ちゃんと上に表示するには。。。
やっぱり文字列の高さを見てラベルの大きさを変えるしかないのかなと思ったのです。
つまり。ソースコードだと
//フォントを基に、行の高さを取得
UIFont* font = label_.font;
CGFloat leading = font.leading;
[label_ setFrame: CGRectMake(0, 0,
label_.frame.size.width, leading)];
これで、ラベルが上に来るようになります。
だったら最初からラベルを行の高さにすればいいんじゃないかといわれるかもしれません。。
なんでこんな事をするかというと、n行のラベルの場合の処理をする為なのです。
そこで、
NSArray* cntList = [str componentsSeparatedByString: @"\n"];
int cnt = [cntList count];
これで何行なのかがcntでわかるので、leadingにかけてあげると
行数にあったラベルの大きさがわかるのです。
んまあ、普通にテキストフィールドを使えば済む話ですけどね。笑
これより楽な方法もあればいいんですけどね。
例えばラベルのframeのheightが200だとすると、
ラベルに@"あはは"っていう文字を入れると
大体100ぐらいの真ん中の位置に文字が表示されるんですね。
それをtextFiledのように、ちゃんと上に表示するには。。。
やっぱり文字列の高さを見てラベルの大きさを変えるしかないのかなと思ったのです。
つまり。ソースコードだと
//フォントを基に、行の高さを取得
UIFont* font = label_.font;
CGFloat leading = font.leading;
[label_ setFrame: CGRectMake(0, 0,
label_.frame.size.width, leading)];
これで、ラベルが上に来るようになります。
だったら最初からラベルを行の高さにすればいいんじゃないかといわれるかもしれません。。
なんでこんな事をするかというと、n行のラベルの場合の処理をする為なのです。
そこで、
NSArray* cntList = [str componentsSeparatedByString: @"\n"];
int cnt = [cntList count];
これで何行なのかがcntでわかるので、leadingにかけてあげると
行数にあったラベルの大きさがわかるのです。
んまあ、普通にテキストフィールドを使えば済む話ですけどね。笑