とは言うものの、今の所はISTableViewCellクラスしかありません。
今後、便利に使えそうなクラスを追加してフレームワーク的にしていければと思っています。
http://github.com/katsuyoshi/cider/tree/master
さて、ISTableViewCellは、UITableViewCellをテキストの編集が出来る様に拡張したクラスです。
UITableViewCellで用意されているスタイル(レイアウト)そのままで編集が出来る様になります。
UITableViewCellのサブクラスを(別途)用意したり、IBでデザインする事なくテキストの編集が出来る様になるので便利ではないでしょうか。
使い方は簡単で、UITableViewCellを使う様に、ISTableViewCellのインスタンス化時にISTableViewCellEditingStyle...から始まるstyleを指定するだけです。(ISTableViewCell.hに定義があります)
cell = [[[ISTableViewCell alloc] initWithStyle:ISTableViewCellEditingStyleDefault reuseIdentifier:CellIdentifier] autorelease];
下はサンブルのUITableViewCellSampleを実行した時のスクリーンショットです。
上の4つのセルは従来のUITableViewCellで、下の4つがISTableViewCellになっていて、テキストの編集が出来ます。
気になる点/注意点
- ハイライト時のアニメーション処理をしていないため、文字の色が戻る時に時差があります。
- textFieldのtextColorを変更する場合はcellに対して設定します。(UITextFieldがhighlightedTextColorを持っていないため)
-initWithStyle:reuseIdentifier:でISTableViewCellStyle...から始まるstyleを指定するとUITableViewCellのインスタンスを返します。ISTableViewCellのつもりでtextField/detailTextFieldにアクセスすると例外が発生します。サブクラスを作る時に混乱するのでISTableViewCellを返す様にしました。
もともと、UITextFieldがhighlightedを想定した作りになっていない様なので、highlightさせる事は少ないのではないかと思うので、保留とさせて下さい。
(妙案がありましたら教えて下さい)
追記:
UITableViewのstyleがUITableViewStylePlainかUITableViewStyleGroupedのどちらが使用されているかは、ISTableViewCellのsuperview(=UITableView)で判断しています。
しかし、作り方に依ってsuperviewが得られない場合があり、フォントサイズが適切なサイズにならない場合があります。
その場合は明示的にフォントを指定して下さい。
cell.textField.font = [UIFont boldSystemFontOfSize:17];
デフォルトのフォントサイズは次の様になります。
UITableViewStylePlain
- ISTableViewCellStyle(Editiing)Default
- textLabel(textField): 20
- detailTextLabel(detailTextField): -
- ISTableViewCellStyle(Editiing)Value1
- textLabel(textField): 20
- detailTextLabel(detailTextField): 20
- ISTableViewCellStyle(Editiing)Value2
- textLabel(textField): 13
- detailTextLabel(detailTextField): 15
- ISTableViewCellStyle(Editiing)Subtitle
- textLabel(textField): 18
- detailTextLabel(detailTextField): 14
UITableViewStyleGrouped
- ISTableViewCellStyle(Editiing)Default
- textLabel(textField): 17
- detailTextLabel(detailTextField): -
- ISTableViewCellStyle(Editiing)Value1
- textLabel(textField): 17
- detailTextLabel(detailTextField): 17
- ISTableViewCellStyle(Editiing)Value2
- textLabel(textField): 13
- detailTextLabel(detailTextField): 15
- ISTableViewCellStyle(Editiing)Subtitle
- textLabel(textField): 18
- detailTextLabel(detailTextField): 14