`
啸笑天
  • 浏览: 3462601 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

获取UIViewController的几个方法

    博客分类:
  • ios
 
阅读更多

UIWindow获取:

@implementation UIWindow (EZ_helper)
- (UIViewController*) ez_topMostController
{
    UIViewController *topController = [self rootViewController];
    
    //  Getting topMost ViewController
    while ([topController presentedViewController])	topController = [topController presentedViewController];
    
    //  Returning topMost ViewController
    return topController;
}

- (UIViewController*)ez_currentViewController;
{
    UIViewController *currentViewController = [self ez_topMostController];
    
    while ([currentViewController isKindOfClass:[UINavigationController class]] && [(UINavigationController*)currentViewController topViewController])
        currentViewController = [(UINavigationController*)currentViewController topViewController];
    
    return currentViewController;
}
@end

 

 

从UIView获取:

@implementation UIView (EZ_Find)
- (UIViewController *)ez_viewController
{    
    UIResponder *responder = self;
    while ((responder = [responder nextResponder])){
        if ([responder isKindOfClass: [UIViewController class]]){
            return (UIViewController *)responder;
        }
    }
    return nil;
}
@end

 

UIViewController获取:

@implementation UIViewController (EZ_Helper)


- (UIViewController*) ez_topMostController
{
    UIViewController *topController = self ;
    
    //  Getting topMost ViewController
    while ([self presentedViewController])	topController = [topController presentedViewController];
    
    //  Returning topMost ViewController
    return topController;
}

- (UIViewController*)ez_currentViewController;
{
    UIViewController *currentViewController = [self ez_topMostController];
    
    while ([currentViewController isKindOfClass:[UINavigationController class]] && [(UINavigationController*)currentViewController topViewController])
    currentViewController = [(UINavigationController*)currentViewController topViewController];
    
    return currentViewController;
}

end

 

获取当前view的UIViewController

@implementation UIViewController (EZ_Helper)

+ (UIViewController *)ez_currentViewControllerFromcurrentView{
    UIViewController *result = nil;
    // 1. get current window
    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
    if (window.windowLevel != UIWindowLevelNormal) {
        NSArray *windows = [[UIApplication sharedApplication] windows];
        for(UIWindow * tmpWin in windows) {
            if (tmpWin.windowLevel == UIWindowLevelNormal) {
                window = tmpWin;
                break;
            }
        }
    }
    // 2. get current View Controller
    UIView *frontView = [[window subviews] objectAtIndex:0];
    id nextResponder = [frontView nextResponder];
    if ([nextResponder isKindOfClass:[UIViewController class]]) {
        result = nextResponder;
    } else {
        result = window.rootViewController;
    }
    return result;
}

end

 

 

 

 

 

0
0
分享到:
评论

相关推荐

    swift-UIViewController的一个封装底部带有GADBannerView

    `GADBannerView`的使用通常涉及到以下几个重要的知识点: 1. **Google AdMob SDK集成**:首先,你需要在项目中集成Google AdMob的SDK,这通常通过CocoaPods或Carthage进行。在Podfile或Cartfile中添加相应依赖,并...

    详解iOS 轻松获取当前控制器的正确方式

    .m 实现不是在当前视图情况下, 我们需要快速的获取到当前控制器, 这种情况就需要先做好一层封装,我一般是通过 UIViewController 写的一个 Category 来实现, 实现起来也非常简单, 只需要我们对 控制器几个方法掌握便...

    详解iOS开发获取当前控制器的正取方式

    .m 实现不是在当前视图情况下, 我们需要快速的获取到当前控制器, 这种情况就需要先做好一层封装,我一般是通过 UIViewController 写的一个 Category 来实现, 实现起来也非常简单, 只需要我们对 控制器几个方法掌握便...

    UIAlertView的基本用法与UIAlertViewDelegate对对话框的事件处理方法

    接着,你需要实现以下几个方法: 1. `alertView:didDismissWithButtonIndex:` 当用户点击alertView的任何按钮时,这个方法会被调用。参数`buttonIndex`表示被点击按钮的索引,0通常是取消按钮。 ```swift func ...

    tableview 独立数据源 独立代理方法 开发中重要经验总结

    这样做有以下几个优点: 1. **代码解耦**:将数据源从ViewController中分离出来,使得ViewController更专注于视图的管理和用户交互,而数据的处理则交给数据源类,两者职责分明,提高了代码的可读性和可测试性。 2....

    objectivec view controller跳转

    1. **模态展示(Modal Presentation)**:通过`presentViewController:animated:completion:`方法,可以将一个新的`UIViewController`模态地推到当前视图控制器之上。例如: ```objective-c UIViewController *...

    IOS 开发之操作图库自定义控制器

    `PhotoButtonDelegate` 是一个协议,定义了一个方法 `- (void)setPhotoButton:(ImageAndPhotos *)imgAndP;`,它允许接收来自 `ImageAndPhotos` 对象的通知。而 `ImageAndPhotos` 类实现了 `UIAlertViewDelegate`, `...

    swift-利用runtime实现友盟app页面访问路径功能

    这里会涉及到`objc/runtime.h`中的几个关键函数: 1. `class_getSuperclass`: 获取指定类的父类。 2. `class_addMethod`: 向类中添加一个方法。 3. `class_replaceMethod`: 如果类已经有了这个方法,那么替换掉原有...

    swift-DrawerKit自定义视图控制器演示模仿您在AppleMaps应用程序中看到的行为

    DrawerKit的使用主要涉及以下几个关键概念和技术: 1. **UIViewController的扩展**:DrawerKit通过扩展UIViewController类,添加了新的方法和属性,使开发者可以轻松地将抽屉功能集成到任何现有的UIViewController...

    iphone view之间传送数据

    在iOS开发中,数据在不同View之间传递是一个常见的任务,特别是在使用导航控制器(UINavigationController)或者模态视图(UIViewController的present方法)时。这里我们将深入探讨如何在iPhone的两个视图之间,从...

    ios table执行顺序

    数据源协议(UITableViewDataSource)包含几个必须实现的方法,例如: 1. `numberOfSectionsInTableView:`:返回表格的section数量。 2. `tableView:numberOfRowsInSection:`:返回指定section中的行数。 3. `...

    卡片轻滑消失效果.zip

    在实际应用中,这种轻滑消失效果的实现可能涉及到以下几个关键技术点: 1. 触摸事件处理:通过监听手势识别器(如UIPanGestureRecognizer)来捕捉用户的滑动操作,获取滑动的位移和速度信息。 2. 自定义动画:根据...

    ios-原来是这么做的.zip

    可能包括一个或多个`UIViewController`子类,它们实现了上述的旋转相关方法,以及在不同屏幕方向下的界面布局。 总的来说,"ios-原来是这么做的.zip"的"RotatingDemo"应该为我们展示了如何在iOS应用中正确处理屏幕...

    swift版仿映客中间凸出tabBar,上下滑动时隐藏或显示导航栏及标签栏

    在这个类中,我们需要覆盖父类的方法,比如`layoutSubviews()`,在这个方法里,我们可以修改TabBar的位置和大小,使其在中央凸出。 2. **监听ScrollView**: 在每个Tab对应的ViewController中,我们需要获取到...

    应用到协议和委托代码

    实现委托通常涉及到以下几个步骤: 1. **声明委托协议**:在需要委托的对象(如UIWebView)的类中,声明一个遵循该协议的代理属性。 ```swift class UIWebView { weak var delegate: UIWebViewDelegate? } ``` 2...

    蓦然LabManual_广场模块_v1.01

    综上所述,"蓦然LabManual_广场模块_v1.01"涵盖了iOS应用开发中的几个关键点:界面设计、逻辑控制、网络通信以及数据模型处理。开发者需要理解并熟练掌握这些知识点,以便于构建功能完善的广场模块。

    ios-UITableView 展开收起.zip

    要实现这个功能,我们主要涉及以下几个步骤: 1. 数据模型设计:首先,你需要为你的数据源定义一个模型,这个模型应该包含展开/收起的状态。例如,你可以增加一个`isExpanded`布尔属性来标记某个条目是否被展开。...

    iOS 多种传值方式

    例如,创建一个名为`DataManager`的单例,然后在需要的地方调用它的实例方法来获取或设置数据。 ```swift class DataManager { static let shared = DataManager() private init() {} var someData: ...

    test123123_Swift_

    1. 使用UIStoryboardSegue:UIStoryboardSegue是两个UIViewController之间连接的表示,可以在`prepare(for:sender:)`方法中拦截和修改导航行为。通过检查segue的identifier或类类型,可以确定即将发生的跳转并执行...

Global site tag (gtag.js) - Google Analytics