在ios tabbar 高度tabbarcontrollerr模式下怎么对UIViewtabbarcontrollerr刷新

现在我碰到一对夫妇的情况下,这将是方便,能够找到“最顶层”视图控制器(一个负责当前视图),但还没有找到一种方法来做到这一点。
主要的挑战是这样的:由于一个是在执行一个类,它是不是一个视图控制器(或视图),并没有一个活动视图的地址]而未获通过最上面的视图控制器的地址(或者说,导航控制器的地址) CodeGo.net,是有可能找到视图控制器? (而且,如果是这样,如何?)
或者,做不到这一点,是有可能找到最顶层的看法?
本文地址 :CodeGo.net/306451/
-------------------------------------------------------------------------------------------------------------------------
1. 的iOS 4中引入的RootViewController的属性上的UIWindow:
[UIApplication sharedApplication].keyWindow.rootViewC
你需要自己设置它,你虽然创建视图控制器之后。
我认为你需要接受的答案,并@fishstix的
+ (UIViewController*) topMostController
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewC
while (topController.presentedViewController) {
topController = topController.presentedViewC
return topC
JonasGs答案(谁离开了标签栏控制器,同时穿越),这里是我的版本返回当前可见视图控制器:
- (UIViewController*)topViewController {
return [self topViewControllerWithRootViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
- (UIViewController*)topViewControllerWithRootViewController:(UIViewController*)rootViewController {
if ([rootViewController isKindOfClass:[UITabBarController class]]) {
UITabBarController* tabBarController = (UITabBarController*)rootViewC
return [self topViewControllerWithRootViewController:tabBarController.selectedViewController];
} else if ([rootViewController isKindOfClass:[UINavigationController class]]) {
UINavigationController* navigationController = (UINavigationController*)rootViewC
return [self topViewControllerWithRootViewController:navigationController.visibleViewController];
} else if (rootViewController.presentedViewController) {
UIViewController* presentedViewController = rootViewController.presentedViewC
return [self topViewControllerWithRootViewController:presentedViewController];
return rootViewC
这是Eric的回答:
UIViewController *_topMostController(UIViewController *cont) {
UIViewController *topController =
while (topController.presentedViewController) {
topController = topController.presentedViewC
if ([topController isKindOfClass:[UINavigationController class]]) {
UIViewController *visible = ((UINavigationController *)topController).visibleViewC
if (visible) {
topController =
return (topController != cont ? topController : nil);
UIViewController *topMostController() {
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewC
UIViewController *next =
while ((next = _topMostController(topController)) != nil) {
topController =
return topC
_topMostController(UIViewController *cont)是一个辅助函数。
现在,所有你需要做的就是调用topMostController()而最上面的的UIViewController应返还!
@UIWindow中(扩展)
-(的UIViewController *)topMostController
的UIViewController * topController=[个体经营RootViewController的];
而(topController.presentedViewController){
topController=topController.presentedViewC
这个伟大的工程从任何根视图微机控制找到了顶视图控制器
+ (UIViewController *)topViewControllerFor:(UIViewController *)viewController
if(!viewController.presentedViewController)
return viewC
return [MF5AppDelegate topViewControllerFor:viewController.presentedViewController];
/* View Controller for Visible View */
AppDelegate *app = [UIApplication sharedApplication].
UIViewController *visibleViewController = [AppDelegate topViewControllerFor:app.window.rootViewController];
我最近买了这个情况在我的一个项目,该项目所需的任何显示的显示控制器是和什么是类型(的UINavigationController CodeGo.net,经典控制器或自定义视图控制器)的通知视图,修改。
所以我JUSTE发布我的代码,这是很容易的,实际上是基于一个协议,它是灵活,每一种类型的容器控制器。
它似乎与最后的答案是相关的,但在一个更灵活的方式。
你可以在这里抢码:PPTopMostController
并得到了最顶端
UIViewController *c = [UIViewController topMostController];
找出哪些是特定视图的最上面的视图可以很容易做到通过导航向上的视图/超景层次:
UIView* view = myV
while (view.superview != nil)
view = view.
&view is the topmost view&
对于视图控制器的东西不是那么容易,因为没有概念,作为一个“父控制器”。无论如何,一个解决方案可以通过利用一个事实,即控制器链接在一起的响应链被发现,所以你可以浏览那一个:
-(UIViewController*)topMostControllerOf:(UIView*)view {
id nextResponder =
while (nextResponder = [v nextResponder]) {
if ([nextResponder isKindOfClass:[YOURCONTROLLERCLASS class]])
return nextR
请注意在线路增加了可选的检查if ([nextResponder isKindOfClass:[YOURCONTROLLERCLASS class]])考虑到一个事实,即在响应链中可能不会导致你你想到哪里去,所以更好,如果你停止搜索点在哪里你知道这是确定的。
在你的情况,YOURCONTROLLERCLASS可能的UINavigationController或任何特定的控制器你正在寻找。
本文标题 :iPhone-如何找到最顶层的视图控制器
本文地址 :CodeGo.net/306451/
Copyright (C) 2014 CodeGo.net 沪ICP备号 联&系& c&o&d&e&g&o &@&1&2&6&.&c&o&m在tabBarController模式下怎么对UIViewController刷新_百度知道
在tabBarController模式下怎么对UIViewController刷新
提问者采纳
在该控制类里面写一个方法:- (void)setDataSource{
tabview.dataSource =
tabview.dataSource =}在AppDelegate.m中调用:- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if(viewController.tabBarItem.tag == 3){
UINavigationController *navigationctr = (UINavigationController *)viewC
SecondViewController *secvc = (SecondViewController *)navigationctr.topViewC
[secvc setDataSource];
电子产品技术支持
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁無限互聯的博客
 1、應用場景——自定義UITabBarController的TabBar視圖  (1)隱藏TabBar視圖  一般我們選擇自定義TabBar視圖有兩種方式。1是將tabBar視圖隱藏;2是將TabBar視圖從父視圖中移除,代碼如下(假設,已創建UITabBarController子類):  - (void)viewDidLoad {  // 隱藏視圖  self.tabBar.hidden = YES;  // 或者直接移除TabBar視圖  [self.tabBar removeFromSuperview];  }  當執行完以上代碼後,tabBar視圖“消失”了,就會顯示出TabBar視圖之前所佔用的空白位置,如下圖所示():  之後,我們會將自定義的tabBar視圖添加到這個空白位置,這個空白位置的高度是49。因此我們自定義的TabBar視圖高度也應該是49,否則會出現Gap。  然而有時,我們的自定義的TabBar視圖高度不一定是49的高度。那麼也就是説,我們需要將這紫色的頁面高度進行調整。  (2)調整視圖  在調整視圖之前,我們需要看看TabBarController的視圖,包含哪些子視圖,代碼如下:  for (UIView *subview in self.view.subviews) {  // 這裏的self指的是TabBarController對象  NSLog(@&subview : %@&, subview);  }  通過控制臺打印結果如下:  subview : &  subview : &  從打印結果我們不難看出,TabBarController的視圖包含2個子視圖,一個是我們非常熟悉的UITabBar視圖,大家可以仔細看看它的frame(尤其是高度),而兩外一個視圖名叫UITransitionView的對象。其實,當我們創建一個TabBarController控制器,它在請求自己的view時,會自動添加2個子視圖,一個是我們非常熟悉的TabBar視圖,另外一個就是UITransitionView。tabBar視圖的作用不言而喻,切換視圖控制器。而UITranstionView視圖作用則是用來承載我們感興趣的內容(間接的加載其他視圖控制器的子視圖)。也就是圖2-1的中的紫色部分。因此,如果我們想控制自定義TabBar視圖的高度(不在是固定的49),我們就需要拉長UITransitionView的高度,即讓紫色的視圖加長。那麼,問題又來了,我們需要在遍歷子視圖時準確的找出UITransitionView,然後修改它的高度,這時,反射就派上用場了。代碼如下所示:  for (UIView *subview in self.view.subviews) {  // NSClassFromString() -& 反射機制,通過指定類名  Class class = NSClassFromString(@&UITransitionView&);  // 是否屬于自該類  if ([subview isMemberOfClass:class]) {  // 將TransitionView對象高度增加9,  // 自定義tabBar時視圖時,高度就可以設置為40了  subview.frame = CGRectMake(0, 0, 320, 519+9);  }  }  2、總結  3、作者:周老師  4、出處:無限互聯3G學院
係統分類:&&&個人分類:&&&本文標簽:
·本文只代表博友個人觀點。本文版權歸作者和共同擁有,轉載請注明作者及出處。
&&&& 13:55
你可以使用這個鏈接引用該篇文章
http://wuxianhulian./blog/a/10CFB.html&
訪問統計:2425
文章個數:2
評論個數:1在tabBarController模式下怎么对UIViewController刷新_百度知道
在tabBarController模式下怎么对UIViewController刷新
提问者采纳
在该控制类里面写一个方法:- (void)setDataSource{
tabview.dataSource =
tabview.dataSource =}在AppDelegate.m中调用:- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if(viewController.tabBarItem.tag == 3){
UINavigationController *navigationctr = (UINavigationController *)viewC
SecondViewController *secvc = (SecondViewController *)navigationctr.topViewC
[secvc setDataSource];
电子产品技术支持
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁学习笔记:iOS 视图控制器(UIViewController)剖析 - martin.zhang - 博客园
视图控制器在iOS编程中占据非常重要的位置,因此我们一定要掌握。
•创建和管理视图。
•管理视图上显示的数据。
•设备方向变化,调整视图大小以适应屏幕。
•负责视图和模型之间的数据及请示的传递。
2. 视图控制器剖析
视图控制器有一个导航项,一个工具栏子项集以及一个tabbarItem项与其关联。
3.&主要属性
•&view:控制器管理的根视图
•&title: 控制器导航栏的标题
•&wantsFullScreenLayout: 是否需要全屏显示
•&interfaceOrientation: 界面方向
•&navigationItem:导航子项
• editing: 是否处理编辑状态
•&hidesBottomBarWhenPushed: 入栈时隐藏底部栏
•&toolbarItems: 工具栏子项集
•&tabBarItem: 标签栏子项
•&editButtonItem:返回一个编辑按钮&&&
•&parentViewController&:交视图控制器&
•&&searchDisplayController&:搜索显示控制器
•&&splitViewController&:分割视图控制器
•&&modalViewController&:模式控制器
•&&navigationController&:导航控制器
•&&tabBarController&:标签控制器
4.&主要方法
•&–&loadView:不要主动调用该方法,当访问控制器view的时候,就会调用该方法。如果要自己创建view,则需要重写该方法。
•&–&viewDidLoad:当加载控制器的视图到内存时,该方法被调用。
•&&–&viewWillAppear:
•&&–&viewDidAppear:
•&&–&viewWillDisappear:
•&&–&viewDidDisappear:
•&–&shouldAutorotateToInterfaceOrientation:是否支持指定的界面方向。
•&–willAnimateRotationToInterfaceOrientation: duration:将要使用动画过渡到某个界面方向。
•&–&didReceiveMemoryWarning:接收到内存警告信息。
•&–&presentModalViewController:animated:显示模式控制器
•&–&dismissModalViewControllerAnimated:隐藏模式控制器
•&–&setToolbarItems:animated:设置工具栏子项
•&–&setEditing:animated:设置编辑状态
5. 设计模式
& & 传统的mvc设计模式
& &iOS mvc设计模式
& 主要区别在于view和model之间的数据交换都要通过控制器来协调,view和model之间不直接进行数据交换。
6.&&控制器加载视图过程
&当调用视图控制器的view属性时,视图控制器会先调用loadView方法加载视图,因此,可以在loadView方法中创建所有的视图,这是比较好的编程惯例。接着会调用视图的viewLoad-&viewWillAppear-&viewDidAppear.
6.&&控制器视图消失过程
& & 消失过程比较简单,不作说明。
7. 事件处理
如图所示,一般情况下,当一个视图不响应用户事件时,它会将事件传递给它的父视图。但是,当视图被视图控制器管理时,它会将事件首先传递给视图控制器。如果视图控制器也不处理该事件,则视图控制器会将数据传递给视图控制器视图的超类,一般是UIWindow.
阅读(...) 评论()
随笔: 165

我要回帖

更多关于 ios刷新uiview 的文章

 

随机推荐