首先,我知道这是一个很长的问题。 REST ASSURED我试图自己解决这个问题(参见:StackOverflow #2609318)。这让我变成了BATTY!
在尝试并且未能在标准的moreNavigationController中实现我自己的EDIT功能之后,我决定重新实现我自己的MORE功能。
我做了以下事情:
添加一个我初始化的HOME视图控制器:initWithRootViewController
添加3个其他默认选项卡:
ResortsListViewController *resortsListViewController;
resortsListViewController = [[ResortsListViewController alloc] initWithNibName:@"ResortsListView" bundle:nil];
resortsListViewController.title = [categoriesDictionary objectForKey:@"category_name"];
resortsListViewController.tabBarItem.image = [UIImage imageNamed:@"whatever.png"];
resortsListViewController.navigationItem.title=@"whatever title";
localNavigationController = [[UINavigationController alloc] initWithRootViewController:resortsListViewController];
localNavigationController.navigationBar.barStyle = UIBarStyleBlack;
[localControllersArray addObject:localNavigationController];
[localNavigationController release];
[resortsListViewController release];
当我将它们添加到标签栏时,这些工作。 (即:点击它们然后进入视图控制器)
然后我将自己的MORE视图控制器添加到标签栏:
MoreViewController *moreViewController;
moreViewController = [[MoreViewController alloc] initWithNibName:@"MoreView" bundle:nil];
moreViewController.title = @"More";
moreViewController.tabBarItem.image = [UIImage imageNamed:@"more.png"];
moreViewController.navigationItem.title=@"More Categories";
localNavigationController = [[UINavigationController alloc] initWithRootViewController:moreViewController];
localNavigationController.navigationBar.barStyle = UIBarStyleBlack;
[localControllersArray addObject:localNavigationController];
[localNavigationController release];
[moreViewController release];
然后
tabBarController.viewControllers = localControllersArray;
tabBarController.moreNavigationController.navigationBar.barStyle = UIBarStyleBlack;
tabBarController.customizableViewControllers = [NSArray arrayWithObjects:nil];
tabBarController.delegate = self;
这创造了必要的联系。好的,到目前为止一切都很好。我得到一个HOME选项卡,3个类别选项卡和一个自定义的MORE选项卡 - 这些都可以工作。
在MORE选项卡视图控制器中,我实现了一个简单的表视图,显示了我在行中的所有其他选项卡。由于我希望能够将它们切换到我创建它们的tabbar中,就像我上面的resortslistviewcontroller一样(即:作为数组中的视图控制器)。当我将它们拉出来在tableview中显示标题时(所以用户可以转到那个“视图”)我只需执行以下操作:
// [myGizmoClass CategoryArray] holds the array of view controller tab bar items that are NOT shown on the main screen.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
... etc...
UIViewController *Uivc = [[myGizmoClass plusCategoryArray] objectAtIndex:indexPath.row];
cell.textLabel.text = [Uivc title];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
这是它落在的地方:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
MyGizmoClass *myGizmoClass= [MyGizmoClass sharedManager];
UIViewController *tbi = [[myGizmoClass plusCategoryArray] objectAtIndex:indexPath.row];
NSLog(@"%@\n",[[tbi navigationItem ]title]);
[self.navigationController pushViewController:tbi animated:YES];
}
这是我得到的错误(“ATMs”是点击的tableview单元格的标题)所以我知道Uivc标题正在拉出正确的标题,因此正确的“objectatindex”:
2010-04-09 11:25:48.222 MouseAddict [47485:207] ATMs 2010-04-09 11:25:48.222 MouseAddict [47485:207] ***由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因: '推送导航控制器是 不支持'
大问题:如何制作UIViewController *tbi
节目的关联视图并进入视图?
我希望UIViewController
是这个tbl
的正确类。我不确定。但我只是想获得视图,所以我可以把它推到堆栈上。
有人可以帮忙吗?
回答 kovpas 的问题如下:myGizmoClass是一个单例(apple的单例myGizmo类.ViewControllers数组存储在[localControllersArray addObject:localNavigationController];
中(就在第一个中)上面的代码片段。并且它确实将它放入并正确地将其拉出来,这可以通过以下事实得到证明:当我在NSLOG时[Uivc title]
日志打印ATMs
。这意味着plusCategoryArray正确地存储和检索viewController(如果确实是存储的内容)。
Pushing a navigation controller is not supported
真的很烦我。为什么viewController
会返回navigationController
,是否有可能强迫navigationController
从中获取“可推送的”视图...或者navigationController
是否有一些其中的元素是视图吗?
答案 0 :(得分:4)
从错误中,看起来你的Gizmo类有一个UINavigationControllers数组,而不是UIViewControllers。所以改为推动:
[self.navigationController pushViewController:[[tbi viewControllers] lastObject] animated:YES];
如果数组与上面调用的localControllers数组相同,那么这应该更好。或者您可以在没有UINavigationControllers的情况下创建阵列,如果您要将它们推送到更多的控制器导航控制器上,则不需要它们。
答案 1 :(得分:1)
我不确定,但是当您尝试将UINavigationController推送到另一个UINavigationController时,看起来会出现此错误。你能提供MyGizmoClass的实现吗?