このタブ バー ビュー コントローラーを使用しようとしていますが、ビュー コントローラーをロードするのに苦労しています。
私は彼らのデモをフォローして、彼らの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がロードされないのはなぜだろうか? 私が言ったように、(タブバーの後ろに)黒い画面が表示されます。