忍者ブログ

[PR]

2025年03月03日
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

テーブルのセルへの参照を2種類以上混在させる

2009年02月15日
アップルから提供されてるテーブル関連のサンプルを見ていると、cellForRowAtIndexPathで返すセルは必ずといっていいほど1種類に限定されています。そのため、セルを何種類も作っては駄目なのかと思いがちですが、別にそんな制限はありません。数種類のセルへの参照を作っておき、列ごとに返すセルを変える事もできます。ちょっと長いのですが一例として、Tiny3Dでオブジェクトやパートを編集するときに開くテーブルでのcellForRowAtIndexPathを示します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];

if (cell == nil) {

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"Cell"]autorelease];

}

PositionTableViewCell *pCell = (PositionTableViewCell *)[tableView

dequeueReusableCellWithIdentifier:@"PositionTableViewCell"];

if (pCell == nil) {

pCell = [[[PositionTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"PositionTableViewCell"] autorelease];

}

SwitchTableViewCell *sCell = (SwitchTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"SwitchTableViewCell"];

if (sCell == nil) {

sCell = [[[SwitchTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"SwitchTableViewCell"] autorelease];

}
switch (indexPath.row) {
case 0: {

sCell.selectionStyle = UITableViewCellSelectionStyleNone;

sCell.myDictionary = self.myDictionary;

sCell.editedKey = @"display";

[sCell.switchCtl setOn:[[myDictionary objectForKey:@"display"] boolValue]
animated:NO];

sCell.nomalLabel.text = NSLocalizedString(@"Display",@"");

return sCell;

break;

}

case 1: {

cell.font = [UIFont systemFontOfSize:20];

cell.text = [NSString stringWithFormat:NSLocalizedString(@"Name: 
%@"@""),[myDictionary objectForKey:@"name"]];

return cell;

break;

}

case 2: {

pCell.enabledSetting = YES;

pCell.titleLabel.text = NSLocalizedString(@"Center",@"");

pCell.leftTitleLabel.text = @"X";

pCell.leftValueLabel.text = [NSString stringWithFormat:@"%f",
[[
myDictionary objectForKey:@"centerx"]floatValue]];

pCell.centerTitleLabel.text = @"Y";

pCell.centerValueLabel.text = [NSString stringWithFormat:@"%f",
[[
myDictionary objectForKey:@"centery"] floatValue]];

pCell.rightTitleLabel.text = @"Z";

pCell.rightValueLabel.text = [NSString stringWithFormat:@"%f",
[[myDictionary objectForKey:@"centerz"] floatValue]];

return pCell;

break;

}

case 3: {

pCell.enabledSetting = YES;

pCell.titleLabel.text = NSLocalizedString(@"Rotate",@"");

pCell.leftTitleLabel.text = @"X";

pCell.leftValueLabel.text = [NSString stringWithFormat:@"%f",
[[
myDictionary objectForKey:@"rotatex"] floatValue]];

pCell.centerTitleLabel.text = @"Y";

pCell.centerValueLabel.text = [NSString stringWithFormat:@"%f",
[[
myDictionary objectForKey:@"rotatey"] floatValue]];

pCell.rightTitleLabel.text = @"Z";

pCell.rightValueLabel.text = [NSString stringWithFormat:@"%f",
[[
myDictionary objectForKey:@"rotatez"] floatValue]];

return pCell;

break;

}

case 4: {

cell.font = [UIFont systemFontOfSize:20];

if ([myDictionary objectForKey:@"magnification"] == nil) {

[myDictionary setObject:[NSNumber numberWithFloat:1]
forKey:@"magnification"];

}

cell.text = [NSString stringWithFormatNSLocalizedString (
@"Magnification: %f",@""),[[myDictionary objectForKey:
@"magnification"]floatValue]];

return cell;

break;

}

}

    return cell;

}

 
こんな感じで、分岐後にreturnでさっさとセルへの参照を返してしまえば良いのですね。ただ、あまりたくさんのセル参照を用意すると、スクロール時のパフォーマンスが低下することも考えられますので注意が必要です。なお、一番最後のreturnはビルド時に警告が出るのを防ぐためのもので、実際にこれでセルを返す事はありません。






PR

出張所開設

2009年02月13日
このたびムービーコミュニティzoome内に出張所を開設しました。これまでHPで掲載したいたビデオはサイトの1ファイル容量が3MBまでという制限もあるためswf形式にしていましたが、出張所では200MBまで可能ということなので、実機で撮影したビデオを公開することにしました。記念すべき実機ビデオ第1弾、ということでシミュレーターでは再現できなかったTiny3Dの3D表示画面での「振ると表示リセット」を掲載してみました。

FTPを利用したMacへのオブジェクトファイル転送

2009年02月13日
Mac OS XにはFTPサーバー機能が標準で用意されているため、これを利用すれば簡単にオブジェクトファイルのバックアップをとる事ができます。また、バックアップしたファイルを再び取り込む事もできます。

Mac側の準備

  1. システム環境設定を開きます。
  2. インターネットとネットワークの共有を開きます。
  3. ファイル共有にチェックを入れます。
  4. ユーザ項目で読み/書きが可能なユーザを把握しておきます。
  5. 右下のオプション...をクリックします。
  6. FTPを使用してファイルやフォルダを共有にチェックを入れます。
  7. 項目に書いてあるftpアドレスをメモしておきます。

Tiny3D側の操作

バックアップを取る場合(swf形式のビデオ再生が可能な場合はビデオガイドも参照してください。)

  1. タブバーのツールをタップします。
  2. アップロードのFTPをタップします。
  3. FTPディレクトリに先ほどメモしたftpアドレスを書きます。ftp://の部分は不要です。(例:192.168.0.20/)
  4. ファイル名の下の>マークのボタンをタップして、転送したいオブジェクトを選択します。
  5. アクセス用ユーザー名はMac側4.で確認したユーザを入力します。
  6. アップロードをタップします。
  7. 先ほどのユーザに対応するパスワードを入力します。
  8. アップロードが無事に終わると確認の表示がでるので、OKをタップします。

バックアップを取り込む場合(swf形式のビデオ再生が可能な場合はビデオガイドも参照してください)

  1. タブバーのツールをタップします。
  2. ダウンロードのFTPをタップします。
  3. FTPディレクトリに先ほどメモしたftpアドレスを書きます。ftp://の部分は不要です。(例:192.168.0.20/)
  4. ファイル名を入力します。拡張子(.t3d)は省略して構いません。
  5. アクセス用ユーザー名はMac側4.で確認したユーザを入力します。
  6. ダウンロードをタップします。
  7. 先ほどのユーザに対応するパスワードを入力します。
  8. ダウンロードが無事に終わると、確認の表示が出るので、OKをタップします。

これらの操作でMac側のホームとの間でTiny3Dのオブジェクトファイルがやり取りできます。Mac側に既に同じファイル名のファイルが存在する場合、アップロードにより上書きされます。Tiny3Dのオブジェクトリストにあるものと同一名のファイルをダウンロードした場合は上書きはされず、こちらの場合は新しくオブジェクトが追加されます。なお、マクロのリンクは自動的に解除されますのでご注意ください。

編集モード中もセルの選択を可能にする方法

2009年02月11日
アップル提供のサンプルEditableDetailViewでは編集モード中も選択が有効になっています。そのため、編集モードでセルをタップすると内容の変更ができます。ところが、普通にInterfaceBuilderを使ってTableViewを作成しても、編集モード中は選択が有効にならず、タップしても無反応になってしまいます。どこかに必ず編集モード中でも選択を有効にする設定があるはずと思い探していたのですが、なかなか見つかりませんでした。それが最近になってようやく発見できました。

それはInterfaceBuilderのAttributes InspecterのTable Viewの項目にある、Allow Selection While Editingにチェックを入れることでした。灯台もと暗しとはまさにこの事ですね。

これで編集モード中にセルをタップするとdidSelectRowAtIndexPathがメッセージを受信するようになりますので、self.editingのBOOL値で分岐させれば通常モードと別の動きをさせることができます。この発見のおかげで、Tiny3Dのバージョン1.2.0以降では、いちいち編集画面を開かなくてもオブジェクトの表示・非表示の切り替えができるようになりました。(まだ他にも手を加えているのでアップまでにはしばらく時間がかかります。ユーザーの皆様、気長にお待ちください。)他にも気づいていない設定がいろいろありそうです(汗)。

Kigen 1.6.0 アップしました

2009年02月11日
こちらもアップロードしました。バージョンアップ内容はLite版と変わりませんが、こちらの方が扱えるデータ量が多いのでListViewの機能アップがより大きな効果を持ちます。バージョン1.1.2以前で発生していたバグにより宙ぶらりんのデータがある方はListView側で消えないデータが出来てしまっていたかもしれませんが、それらもListViewで見ながら消すことが出来るようになります。

  • List Viewでも期限/個数の編集や削除が可能になりました。また、List Viewでは通常モードからでもアイテムの横方向スワイプで削除ボタンが出せるようになりました。
  • Edit ViewとList Viewに表示内容ガイドを追加しました。
  • アイテムリストで個数が0のアイテムを赤色表示するようにしました。
  • ヘルプで上下へのページ移動が出来るようになりました。
 

Kigen Lite 1.6.0 アップしました

2009年02月11日
ひさびさのバージョンアップです。Tiny3D開発の試行錯誤中に得られたノウハウも投入しています。

  • List Viewでも期限/個数の編集や削除が可能になりました。また、List Viewでは通常モードからでもアイテムの横方向スワイプで削除ボタンが出せるようになりました。
  • Edit ViewとList Viewに表示内容ガイドを追加しました。
  • アイテムリストで個数が0のアイテムを赤色表示するようにしました。
  • ヘルプで上下へのページ移動が出来るようになりました。
 

Tiny3D 1.1.0 リリースしました

2009年02月01日
バージョンアップが承認されました。位置設定マクロと色設定マクロのそれぞれを一括で削除できるようになりました。なお、私自身の端末でのリリース用バージョンで、ホーム画面に戻ったときのデータセーブが失敗する場合があります。これがApp Store配布用バージョンでも起こる問題なのかは確認できていませんが、念のためバージョン1.2.0に手動データセーブ機能も実装する予定です。いろいろやることが山済み状態ですが、少しずつ片付けて行きます。

バージョンアップについて

2009年01月30日
現在バージョン1.1.0をアップルで審査中です。
主な変更は位置および色設定マクロの全削除機能の追加です。

また、ヘルプファイルを含めたバージョンアップ版1.2.0を準備しています。
こちらでは円柱を塗りスイッチオフで描画した時に見られるバグも修正します。