我对iOS很陌生。我正在构建一个应用程序并遇到问题。我有一个导航控制器,其堆栈顶部有一个表视图控制器。当我在该表视图控制器中选择一行时,我希望看到的是具有以下内容的集合视图:
导航栏,其名称在所选单元格上显示为导航项目标题。
作为主界面的集合视图
带有集合视图的标签栏和imagePickerController
这是我的代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NewTabBarController *tbc = [[NewTabBarController alloc] init];
UIImagePickerController *takeAPicture = [[UIImagePickerController alloc] init];
UITabBarItem *tabItem = [takeAPicture tabBarItem];
[tabItem setImage:[UIImage imageWithContentsOfFile:@"CameraIcon.jpg"]];
[tabItem setTitle:@"Take a photo!"];
UICollectionViewFlowLayout *photoFlow = [[UICollectionViewFlowLayout alloc] init];
PhotoCollectionViewController *photoHub = [[PhotoCollectionViewController alloc] initWithCollectionViewLayout:photoFlow];
[tbc setViewControllers:[NSArray arrayWithObjects:photoHub, takeAPicture, nil]];
NSArray *items = [[items accessor] allItems];
Item *item = [items objectAtIndex:[indexPath row]];
[photoHub setItem:item];
[photoHub useLayoutToLayoutNavigationTransitions];
[[self navigationController] pushViewController:tbc animated:YES];
}
然后在我的PhotoCollectionViewController实现中我有:
@syntesize item;
- (void)viewDidLoad {
[super viewDidLoad];
UINavigationItem *itemHeader = [self navigationItem];
[itemHeader setTitle:[item itemName]];
UITabBarItem *tabItem = [self tabBarItem];
[tabItem setImage:[UIImage imageWithContentsOfFile:@"itemImage.jpg"]];
[tabItem setTitle:[NSString stringWithFormat:@"Photos of %@", [item itemName]]];
}
我的问题是,当我选择单元格时,集合视图会加载,我可以看到我在集合视图中设置的单元格,但导航栏项目没有标题,标签栏项目有&# 34;(null)"的照片没有形象。 "拍照!"文本出现,但图像没有。
你们有什么想法我如何重组这个以使一切正常流动。我必须在使用标签和导航控制器的方式上做错事。我不希望在应用程序的这个阶段有任何标签,这已经是3或4个VC。我应该使用App Delegate的标签栏控制器吗?
答案 0 :(得分:1)
这里的问题是您将标签栏控制器推到导航控制器堆栈上。标签栏的视图控制器将具有导航项,但当视图控制器在屏幕上时,它们的导航项不会显示。相反,标签栏控制器的导航项目在屏幕上。
您可以使用self.tabBarController.navigationItem
,但每次视图控制器都必须在每次开启/关闭屏幕时修改导航项目,这非常麻烦。
如果您要使用UITabBarController,我建议您以模态方式呈现它,或者让它成为UIWindow上的根视图控制器。让它作为导航控制器视图控制器堆栈中的视图控制器正常工作很难。
您的标签栏项目未显示其名称是一个单独的问题。这是因为在设置项目实例之前调用了viewDidLoad,特别是当您调用[tbc setViewControllers:[NSArray arrayWithObjects:photoHub, takeAPicture, nil]];
您可以通过在视图中确定加载来确认这一点,您将看到该项目为零。如果你还没有,你应该重载PhotoCollectionViewController中的setItem:方法,并让该方法也更新你的UI。