画像を貼ることさえできればよいので。。。
なんか設定がうまくできんのよねぇ。。。
さて、それはともかく。
Static Cellで設定画面を作りたい。
まず、UITableViewControllerはこんな。
その中のTableView。
ここがStatic Cellsだ。
そうすると、"Table View Section"というのがセクション数分できる。
Table View Section自体は、特に用が無いみたいで、設定するのはRows。行数だ。
Cellの例。
さて、これを設定として使うときはどうするのか。
今回は、セクションの中身は選択肢で、タップしたものが1つだけ選択されるようなものを考えている。
ラジオボタンみたいなイメージなのだが、iOSではラジオボタンがないからcheckmarkになるんじゃないかと思っている。
ただ、iOSとしてはチェックマークとか、ディスクロージャーとか、そういうのは”Accessory"らしい。
付属物、みたいなものか?
だから、「チェックマーク? 付けたければ付ければいいやん」みたいなスタンスのようだ。
何かというと、タップしたからマークを付ける、とか、他がタップされたからマークを外すとかは、たぶん実装でやってあげないといけない、ということだ。
あ、文句を言っているように聞こえるかもしれないが、どちらかというと「私が文化をわかっていない」の方じゃないかと思っている。
あるいは、やり方をわかっていないだけか。
まあ、文句であることには変わりが無いんだけどね。
そんなわけで、こういう実装をした。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *curCell = [tableView cellForRowAtIndexPath:indexPath];
//同じセクションのチェックを全部外す
for (NSIndexPath *path in [tableView indexPathsForVisibleRows]) {
if (path.section == indexPath.section) {
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:path];
cell.accessoryType = UITableViewCellAccessoryNone;
}
}
//自分にチェック
curCell.accessoryType = UITableViewCellAccessoryCheckmark;
}
動いてはいるんだけど、ここまでやってやらんといかんの?とは思う。
あと、indexPathsForVisibleRowsで見えてる部分のindexPathを取得してるけど、じゃあ画面外まで広がってたらどうすんだよ、とか。
まず、didSelectRowAtIndexPathで、タップされたセルの情報が取得できる。
セクション番号とか、行番号とか。
NSIndexPathは、行番号とセクション番号がわかれば取得できる。
ならば、あとはセクション番号から行数がわかれば、indexPathesForVisibleRowsに頼らずに済む。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *curCell = [tableView cellForRowAtIndexPath:indexPath];
//同じセクションのチェックを全部外す
NSInteger rows = [tableView numberOfRowsInSection:indexPath.section];
for (NSInteger row=0; row<rows; row++) {
NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:indexPath.section];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:path];
cell.accessoryType = UITableViewCellAccessoryNone;
}
//自分にチェック
curCell.accessoryType = UITableViewCellAccessoryCheckmark;
}
どうだ?
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。