0

このタブ バー ビュー コントローラーを使用しようとしていますが、ビュー コントローラーをロードするのに苦労しています。

私は彼らのデモをフォローして、彼らのView Controllerを埋めましたが、得られるのは黒いビューだけです(おそらくnil?)。ブレークポイントを設定しました。self.tabBarItems には、私が知る限りのビュー コントローラーが含まれています。つまり、2 つのビュー コントローラーを指定すると、カウントは 2 になりますが、それ以上の詳細は表示されません。 ここに画像の説明を入力

tabBarItems に 2 つのオブジェクトがあることを確認しますが、ドロップダウン矢印をクリックしても何も表示されませんか?

とにかくコードはとてもシンプルです。

私のコード:

- (void)setup {

  // Set View Frame
    self.viewFrame = (CGRect){CGPointZero, {kKYViewWidth, kKYViewHeight}};

    // Add child view controllers to each tab
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {

        _salesViewController  = [[SalesViewController alloc] initWithNibName:@"SalesViewController_iPhone" bundle:nil];

        _customersViewController = [[CustomersViewController alloc] initWithNibName:@"CustomersViewController_iPhone" bundle:nil];

        _itemsViewController = [[ItemsViewController alloc] initWithNibName:@"ItemsViewController_iPhone" bundle:nil];

        _employeesViewController = [[EmployeesViewController alloc] initWithNibName:@"EmployeesViewController_iPhone" bundle:nil];

        _settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController_iPhone" bundle:nil];

    } else {

        _salesViewController  = [[SalesViewController alloc] initWithNibName:@"SalesViewController_iPad" bundle:nil];

        _customersViewController = [[CustomersViewController alloc] initWithNibName:@"CustomersViewController_iPad" bundle:nil];

        _itemsViewController = [[ItemsViewController alloc] initWithNibName:@"ItemsViewController_iPad" bundle:nil];

        _employeesViewController = [[EmployeesViewController alloc] initWithNibName:@"EmployeesViewController_iPad" bundle:nil];

        _settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController_iPad" bundle:nil];
    }

  // Set child views' Frame
    CGRect childViewFrame = self.viewFrame;
    [_salesViewController.view   setFrame:childViewFrame];
    [_customersViewController.view   setFrame:childViewFrame];
    [_itemsViewController.view setFrame:childViewFrame];
    [_employeesViewController.view  setFrame:childViewFrame];
    [_settingsViewController.view  setFrame:childViewFrame];

  // Add child views as tab bar items
  self.tabBarItems = @[@{@"image"          : [NSString stringWithFormat:kKYITabBarItemImageNameFormat, 1],
                         @"Sales" : _salesViewController} ,
                       @{@"image"          : [NSString stringWithFormat:kKYITabBarItemImageNameFormat, 2],
                        @"Customers" : _customersViewController}
    ];

  // Add a gesture signal on the first view
  UIImage * gestureImage = [UIImage imageNamed:kKYIArcTabGestureHelp];
  CGRect gestureImageViewFrame =
    (CGRect){{(kKYViewWidth - gestureImage.size.width) / 2.f,
              (kKYViewHeight - kKYTabBarHeight - gestureImage.size.height) / 2.f},
             gestureImage.size};
  UIImageView * gestureImageView = [[UIImageView alloc] initWithFrame:gestureImageViewFrame];
  [gestureImageView setImage:gestureImage];
  [gestureImageView setUserInteractionEnabled:YES];
  [_salesViewController.view addSubview:gestureImageView];
}

私がそれを交換した場合、動作するデモのコード:

// Override |KYArcTabViewController|'s |-setup|
- (void)setup {
  // Set View Frame
  self.viewFrame = (CGRect){CGPointZero, {kKYViewWidth, kKYViewHeight}};

  // Add child view controllers to each tab
  viewControllerOne_   = [[UIViewController alloc] init];
  viewControllerTwo_   = [[UIViewController alloc] init];
  viewControllerThree_ = [[UIViewController alloc] init];
  viewControllerFour_  = [[UIViewController alloc] init];

  // Set child views' Frame
  CGRect childViewFrame = self.viewFrame;
  [viewControllerOne_.view   setFrame:childViewFrame];
  [viewControllerTwo_.view   setFrame:childViewFrame];
  [viewControllerThree_.view setFrame:childViewFrame];
  [viewControllerFour_.view  setFrame:childViewFrame];

  // Set child views' background color
  [viewControllerOne_.view   setBackgroundColor:[UIColor blackColor]];
  [viewControllerTwo_.view   setBackgroundColor:[UIColor redColor]];
  [viewControllerThree_.view setBackgroundColor:[UIColor greenColor]];
  [viewControllerFour_.view  setBackgroundColor:[UIColor blueColor]];

  // Add child views as tab bar items
  self.tabBarItems = @[@{@"image"          : [NSString stringWithFormat:kKYITabBarItemImageNameFormat, 1],
                         @"viewController" : viewControllerOne_},
                       @{@"image"          : [NSString stringWithFormat:kKYITabBarItemImageNameFormat, 2],
                         @"viewController" : viewControllerTwo_},
                       @{@"image"          : [NSString stringWithFormat:kKYITabBarItemImageNameFormat, 3],
                         @"viewController" : viewControllerThree_},
                       @{@"image"          : [NSString stringWithFormat:kKYITabBarItemImageNameFormat, 4],
                         @"viewController" : viewControllerFour_}];

  // Add a gesture signal on the first view
  UIImage * gestureImage = [UIImage imageNamed:kKYIArcTabGestureHelp];
  CGRect gestureImageViewFrame =
    (CGRect){{(kKYViewWidth - gestureImage.size.width) / 2.f,
              (kKYViewHeight - kKYTabBarHeight - gestureImage.size.height) / 2.f},
             gestureImage.size};
  UIImageView * gestureImageView = [[UIImageView alloc] initWithFrame:gestureImageViewFrame];
  [gestureImageView setImage:gestureImage];
  [gestureImageView setUserInteractionEnabled:YES];
  [viewControllerOne_.view addSubview:gestureImageView];
  [gestureImageView release];
}

参考までに: プロパティの宣言、初期化、合成 (特別なことは何もありません) などの基本的なものであるデモのコードから除外されたものはほとんどありません。また、アクセサーを使用して、または使用せずに試しました (self. vs _var)

基本的に、顧客のView Controllerがロードされないのはなぜだろうか? 私が言ったように、(タブバーの後ろに)黒い画面が表示されます。

4

1 に答える 1

0

だから問題はそれだった

self.tabBarItems = @[@{@"image"          : [NSString stringWithFormat:kKYITabBarItemImageNameFormat, 1],
                         @"viewController" : viewControllerOne_},
                       @{@"image"          : [NSString stringWithFormat:kKYITabBarItemImageNameFormat, 2],
                         @"viewController" : viewControllerTwo_},
                       @{@"image"          : [NSString stringWithFormat:kKYITabBarItemImageNameFormat, 3],
                         @"viewController" : viewControllerThree_},
                       @{@"image"          : [NSString stringWithFormat:kKYITabBarItemImageNameFormat, 4],
                         @"viewController" : viewControllerFour_}];

ビューコントローラーの名前ではなく、「viewController」という単語が必要でした。これは、親クラスがビューを取得するために使用していたキーでした。

于 2013-01-20T19:06:49.693 に答える