SplitViewアプリケーションでは、起動時にTableViewにいくつかの一般的なデータがあります。TableViewのデータを選択した場合、最初はTableViewに詳細データを表示したいのですが、そこで何かを選択すると、DetailViewにも表示されるはずです。私の質問は2番目のステップに関するものです:TableViewのデータを更新し、何かが選択されたときにこのTableViewが消えないようにするにはどうすればよいですか?
1 に答える
Apple が提供する MasterDetail アプリケーションから開始する場合、デフォルトでは次のようになります。
- 分割ビュー コントローラーを作成します。
- 左側には UINavigationController があります
- 右側には DetailViewController があります
- AppDelegate には、ルートコントローラーを MasterViewController とする UINavigationController があります。(これが、左側に MasterViewController が表示される理由です)。
- ただし、左側の MasterViewController は、デフォルトではナビゲーション コントローラーに関連することは何もしません。これは、さらにドリルダウンして、別のドリルダウンビューなどを取得できるようにしたい場所のようです。
必要な手順
まず、UITableViewController のサブクラスである別の DrillDownLevel1ViewController を作成します。
そのクラスには、データ用と DetailViewController への参照用の 2 つのプロパティがあります。
@property(strong,nonatomic)NSArray *drillDownLevel1Data; @property(strong,nonatomic)DetailViewController *detailViewController;
MasterViewController の didSelectRowAtIndexPath で、次のようなことを行います
DrillDownLevel1ViewController *drillDownLevel1ViewController = [[DrillDownLevel1ViewController alloc] init]; drillDownLevel1ViewController.drillDownLevel1Data=[NSArray arrayWithObjects:@"One",@"Two",@"Three", nil]; drillDownLevel1ViewController.detailViewController=self.detailViewController; [self.navigationController pushViewController:drillDownLevel1ViewController animated:YES];
DrillDownLevel1ViewController では、numberOfSections、numberOfRows などを正しく設定できます。
DrillDownLevel1ViewControllerのcellForRowAtIndexPathに正しい値を設定
static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; if(cell==nil){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]; } cell.textLabel.text=[drillDownLevel1Data objectAtIndex:indexPath.row]; return cell;
DrillDownLevel1ViewController の didSelectRowAtIndexPath で
self.detailViewController.detailItem = [drillDownLevel1Data objectAtIndex:indexPath.row]; [self.detailViewController configureView];
右側の DetailViewController にデータが表示されます。そうでない場合は、コンセントが接続されているかどうかなどについてデバッグを行うことができます。
私が作成した簡単なプロジェクトがあります。必要に応じて、メールで送信できます。