- 2010年4月 6日 21:48
- iPhone
久しぶりにiPhoneネタです。
UITextFieldはいろいろ気が利いていて使いやすのですが、
複数行の入力には対応していないみたいです。(残念)
複数行となると、UITextViewを使います。
UITextViewですと、UITextFieldのようにReturnKeyで入力完了を受け取ることができないので、ナビゲーションバーに「完了」ボタン等を付けていました。UITextFieldと同じ動きがクライアントの要求だったのでとても困っていたのですが、すてきな記事を見つけました。
How to Dismiss the Keyboard when using a UITextView
ポイントは、UITextViewDelegateの
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
UITextViewで入力されたキーをキャッチ、改行コード(\n)の場合は、完了とみなす。
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{ if ([text isEqualToString:@"\n"]) { [textView resignFirstResponder]; return NO; } return YES; }
UITextViewをinitした後に、
textview.returnKeyType = UIReturnKeyDone;
textview.scrollEnabled = NO;
としておくと、「改行」ボタンは「完了」ボタンに代わり、スクロールもしなくなります。
あとは、placeholderと×ボタンを付けられれば、textfieldみたいに使えるんだけどなぁ。
追記:ついでに文字数制限
上記のdelegateに付け足せばできる。
追記:ご指摘を頂きまして修正しました。
#define TEXT_LIMIT_NUM 40 //40文字まで(半角全角の判別はしていない) - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{ if ([text isEqualToString:@"\n"]) { [textView resignFirstResponder]; return NO; }else{if (range.location + range.lengthif ([textView.text length] + [text length] - range.length <= TEXT_LIMIT_NUM) { return YES; }else{ return NO; } } }+ [text length]<= TEXT_LIMIT_NUM) {
下記を参考にしました(追記: 間違ってるかもです)
UITextFieldで文字数制限をする
- Newer: iPadから投稿
- Older: AS3 文字数入力制限と文字数カウント
Comments:0
Trackbacks:0
- TrackBack URL for this entry
- http://www.hirano-dept.com/mt/mt-tb.cgi/93
- Listed below are links to weblogs that reference
- iPhone UITextView 改行ボタンを完了ボタンに from 袖触れ合うも多少の縁