0

RootViewController に埋め込まれたナビゲーション コントローラーがあります。RootViewController 内に存在する要素は、セグメント化されたコントロールと UIView です。異なるセグメントが選択されると、UIView は対応する ViewController を表示します。

UIView に表示される各 ViewController は UITableViewController です。

セグメントの選択に従ってテーブルの値を表示する必要があります。また、テーブルの行のいずれかが選択されている場合は、詳細ビューで新しい ViewController に移動する必要があります。

セグメントの変更に従って UITableViewControllers を表示できます。ただし、テーブルの行をクリックすると、ストーリーボードで特定の ViewController を作成し、識別子も設定したにもかかわらず、表示される新しい ViewController が空白 (黒い画面) になります。

ViewController.m のセグメント化されたコントロールの変更のコード

- (void)segmentedControlChangedValue:(UISegmentedControl*)segmentedControl {

int selIndex = segmentedControl.selectedIndex;

if (selIndex == 0)
{
    aTable = [[aTableViewController alloc] init];

    aTable.view.frame = self.myView.bounds;
    [self.myView addSubview:aTable.view];
    [self addChildViewController:aTable];
}

if (selIndex == 1)
{
    bTable = [[bTableViewController alloc] init];

    bTable.view.frame = self.myView.bounds;
    [self.myView addSubview:bTable.view];
    [self addChildViewController:bTable];

}

if (selIndex == 2)
{
    //NSLog (@"Well you selected a 3rd option");
}}

didSelectRowAtIndexPath のコード:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[super tableView:tableView didSelectRowAtIndexPath:indexPath];

newDetailController* newController = [self.storyboard instantiateViewControllerWithIdentifier:@"Detail"];

newController = [[newDetailController alloc] init];

[[self navigationController] pushViewController:newController animated:YES];}

ストーリーボード デザインで使用する ViewController を指定し、識別子も使用しているにもかかわらず、pushViewController は空のビューをプッシュします。

このエラーを修正するために何をしなければならないかを理解するのを手伝ってください。

更新 - 上記の問題は解決されました。

私が今直面している問題は、newViewController のデータにアクセスできないことです。

次のように、データを newViewController に渡します。

  1. 渡したいすべての要素を含む newClass という名前のクラスを作成します。

  2. firstViewController に NSMutableArray "newObjects" を作成します。

  3. このメソッドで各 newClass オブジェクトを作成します。

    • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object {

    static NSString *CellIdentifier = @"Cell";

    customBigTableCell *cell = (customBigTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) { cell = [[customBigTableCell alloc] init]; }

    cell.name.text = [object objectForKey:@"objName"];

    newClass* newObj = [[newClass alloc] init];

    newObj.objName = cell.name.text;

    [newObjects addObject:newObj];

    return cell; } Plsは私を許してください..コードブロックのインデントが台無しになっているため...また、PFObjectは、データベースにParseを使用しているためです。

  4. 作成したオブジェクトを newObjects 配列に追加します。

  5. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPathメソッドでは、これはコードです

    • (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [super tableView:tableView didSelectRowAtIndexPath:indexPath];

      UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];

      newDetailController* newController = [storyboard instantiateViewControllerWithIdentifier:@"UpcomingDetail"];

      obj = [[newClass alloc] init];

      NSIndexPath* パス = [self.tableView indexPathForSelectedRow];

      obj = [newObjects objectAtIndex:path.row];

      NSLog(@"選択された行は %ld です", (長い)path.row); //これは、選択された正しい行を返します

      NSLog(@"Movie selected is %@", [[newObjects objectAtIndex:path.row] objName]);//ただし、cellForRowAtIndexPath メソッドによると、これは正しいものではありません。

      [newController setNewObj:obj];

      [[self navigationController] pushViewController:newController animation:YES]; }

このコードを実行すると、行が正しく選択されます。ただし、データベースで対応する行を取得できません。配列には冗長データが格納されます。

4

1 に答える 1

1

その中間行を取り除く必要があります。

newController = [[newDetailController alloc] init];

これは、最初の行で定義した newController を (ビューが設定されていない空のコントローラーとして) 再定義するだけです。

于 2013-02-11T16:29:53.353 に答える