TabBarController NAvigationController 和 UIViewController
Posted
技术标签:
【中文标题】TabBarController NAvigationController 和 UIViewController【英文标题】:TabBarController NAvigationController and UIViewController 【发布时间】:2009-07-15 18:18:13 【问题描述】:我有下一个问题:
在我的项目中,我有下一个:
UItabbarController
....一些 UIAvigationControllers....
*(1) UINavigationController
UIViewController (UItableView) - When select one row it goes to...(by push) to:
UIViewController (UItableView) - And here the same than before, for each row i open a new tableview....
我的问题是,当我点击标签栏项目时,我看到 viewController 视图就像我上次看到的一样,并且没有重新加载到 *(1) 再次第一次视图(就像我想要的那样)
每次单击标签栏项目时,我都需要在哪里写某事,我会重新加载此标签栏项目的第一个视图。
PD:我有电话:[theTableView reloadData];在“viewWillAppear”方法中。
我正在做的事情是: 在我的导航控制器中,我有一个视图控制器(如 tableview),当我单击一行时,在“didSelectRowAtIndexPath”方法中,我创建另一个调用“myController”的视图控制器,然后像这样推送这个元素([[self navigationController] pushViewController :myController 动画:YES];) 每次我点击下一个表格中的一行时都会这样做。
然后我认为问题不在于在方法 viewWillAppear 中重新加载表格视图,而是从屏幕中取出我插入到根目录的下一个视图控制器。
我是对的?
简历中:
我的应用有下一个:
在屏幕之间移动的标签栏 每个标签栏内的导航(根据您的需要),为什么?因为所有的 tabBarItems 都显示了表格,如果你点击一行,你会打开另一个表格,.....然后我的问题是,当我单击标签栏时,我想回到第一个主表。目前,该应用程序不执行此操作,它会在此选项卡中最后一次访问的屏幕(表格视图)中继续。 (不完全正确,因为如果我单击两次,是的,它会返回,但不要输入“viewWillLoad”或“didSelectViewController”方法,因为我制作了 NSLogs 但它没有显示它们)。
草图可以是这样的:
AppDelegate -> WelcomeScreen ->VideosTableViewController ->RElatedVideosTableViewController -> ..... ..... ....
第一件事是显示欢迎屏幕(不是那么重要,只有一些按钮),在这个类中,我有 TabBArController 用“localViewControllersArray”初始化,这是一个 NSMutableArray 的 NavigationControllers,每个都用一个 ViewController 初始化。
然后,当我按下此欢迎屏幕中的一个按钮时,我将打开标签栏控制器(显示 VideosTableViewController)
在下一步中,当我单击一行时,在“DidSelectRowAtIndexPath”中创建一个 RElatedVideosTableViewController,并通过“[[self navigationController] push....:“我创建的相关视频表视图”动画:是];
我也有:
添加:UITabBarControllerDelegate 添加:
(void)tabBarController:(UITabBarController*)tabBarController didEndCustomizingViewControllers: (NSArray*)viewControllers 已更改:(BOOL)已更改
(void)tabBarController:(UITabBarController*)tabBarController didSelectViewController:(UIViewController*)viewController 如果([视图控制器 isKindOfClass:[UINavigationController 班级]]) [(UINavigationController *)viewController popToRootViewController:NO]; [表格视图重新加载数据]; NSLog(@"重新加载");
在类的初始化时: [super.tabBarController setDelegate:self];
但是在控制台中我没有看到我正在制作的 NSLog,然后不会采用这种方法。
【问题讨论】:
【参考方案1】:让您的应用委托标签栏控制器的委托,无论是在 Interface Builder 中还是在代码中:
- (void)applicationDidFinishLaunching
...
self.tabBarController.delegate = self;
然后,当标签栏切换到不同的视图时,您会收到通知,此时您会弹出到所选导航控制器的根目录:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
if ([viewController isKindOfClass:[UINavigationController class]])
[(UINavigationController *)viewController popToRootViewController:NO];
每个视图控制器都应该有自己的表视图,所以我不知道你想通过重新加载来做什么。
【讨论】:
我正在尝试重新加载,因为我想在每次显示表格时使用它来调用连接方法。 我将此添加到我的代码中,继续执行相同操作,无需输入 didSelectViewController 方法。请注意,在我的 appdelegate 和其他人之间,我有一个welcomeScreen 视图控制器,然后我在哪里声明 tabbarcontrolelr 以及我在哪里放置行:self.tabbarController.delegate=self;在这个班级。我不知道这是否会有所不同。 在设置代理的行上放置一个断点。如果它没有被调用,你(显然)需要把它放在别处。也许你把它放在一个不会被调用的 init 方法中。 我声明:self.tabBarController.delegate = self;并且正在做这一行,我检查了:) 现在我可以进入 didSelectViewController 了,但这并没有把视图带出屏幕。以上是关于TabBarController NAvigationController 和 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章
TabBarController 添加自定义按钮不可点击问题[重复]
在 TabBarController 上刷新 ViewController