在NSObject类中,和继承它的类中,弹出UIAlertcontroller和push、present到其它界面
来源:互联网 发布:贵阳大数据培训班 编辑:程序博客网 时间:2024/06/02 08:34
在NSObject类中,和继承它的类中,弹出UIAlertcontroller和push、present到其它界面
笔者平时不喜欢讲废话,但是在这里还是要说下,这个功能,我实现的原理。
大家都知道,NSObject或者继承它的类里,是不能直接使用界面的。
这时要想创建界面什么的,怎么办呢?
大家都知道,界面控件什么的基本都是以UI开头的,已UI开头,就说明他们是属于UIKit框架的。
所以要在NSObject的子类中使用UI控件,这时候只需要导入UIKit框架就行。这样第一个大问题就解决了,这样就能在NSObject的子类中创建UIKi了。
那么第二个大问题,如何让他在NSObject中实现界面跳转呢?
push和present这是两种跳转方式,但是调用这两个方法的前提,是得找到他的视图控制器才可以。
这时候,就进入到下一个问题了,怎么去找它的视图控制器?
我们公司的前辈,曾经写过一个在子视图中找到其根父视图的控制器的方法,那么在NSObject的子类中,怎么去找,是不是可以借鉴一下他的方法呢?
经过一番苦思冥想,终于想到一个方案,我何必纠结这些,我找WIndow的当前窗口视图不就行了吗?于是这个问题也就解决了。
我把这个找窗口的主视图的方法,封装了出来,大家可以在demo中看到。为了安全起见,代码,我也在博客中写一下。
#import <Foundation/Foundation.h>@interface NewObject : NSObject#pragma mark 弹出AlerController- (void)showAlertViewControllerWithTitle:(NSString *)title message:(NSString *)message;#pragma mark presentViewController- (void)presentViewControllerWith:(NSString *)ViewCotrollerClass;@end
//// NewObject.m// 继承与NSObject的类中弹出UIAlerVIewController//// Created by mac on 16/4/25.// Copyright © 2016年贝尔特伦. All rights reserved.//#import "NewObject.h"#import "NSObject+ViewController.h"@implementation NewObject#pragma mark 弹出AlerController- (void)showAlertViewControllerWithTitle:(NSString *)title message:(NSString *)message{ UIViewController *viewC = self.ViewController; UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]; UIAlertAction *sureAcion = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil]; [alertController addAction:cancelAction]; [alertController addAction:sureAcion]; [viewC presentViewController:alertController animated:YES completion:nil]; }#pragma mark presentViewController- (void)presentViewControllerWith:(NSString *)ViewCotrollerClass{ UIViewController *viewC = self.ViewController;#pragma mark push方法跟这一样,只是变变写法 [viewC presentViewController:[[NSClassFromString(ViewCotrollerClass) alloc] init] animated:YES completion:nil];}@end
//// ViewController.m// 继承与NSObject的类中弹出UIAlerVIewController//// Created by mac on 16/4/25.// Copyright © 2016年 贝尔特伦. All rights reserved.//#import "ViewController.h"#import "NewObject.h"@interface ViewController ()#warning 若想以此文件中代码写博客,请署名“贝尔”@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; NewObject *obj = [[NewObject alloc] init]; #pragma mark 此处必须有延迟,因为ViewDidLoad还没执行完的时候,找不到当前Window的窗口视图 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{// 调用弹出ALertController的方法 [obj showAlertViewControllerWithTitle:@"信息" message:@"错误"];// [obj presentViewControllerWith:@"FirstViewController"]; }); }@end
下面是我封装的一个类目,找窗口主视图的。
//// NSObject+ViewController.h// 继承与NSObject的类//// Created by mac on 16/4/25.// Copyright © 2016年 贝尔特伦. All rights reserved.//#import <Foundation/Foundation.h>#import <UIKit/UIKit.h>@interface NSObject (ViewController)- (UIViewController *)ViewController;@end
//// NSObject+ViewController.m// 继承与NSObject的类//// Created by mac on 16/4/25.// Copyright © 2016年 贝尔特伦. All rights reserved.//#import "NSObject+ViewController.h"@implementation NSObject (ViewController)- (UIViewController *)ViewController{ UIViewController *viewC = [[[UIApplication sharedApplication] keyWindow] rootViewController]; return viewC;}@end
这个demo我起的名字叫看的懂的拿去用,起这个名字,并不是歧视某些人,只是希望,大家能学会灵活运用,这东西的用处,可大可少,就看你能不能想到。
我就用这个方法,封装了一个弹出alertcontroller的方法,还在整个项目中,集成了一个加载动画。所有请求数据的地方都有这个动画,前前后后,加上些demo的时间,也就花了三四个小时吧。
1 0
- 在NSObject类中,和继承它的类中,弹出UIAlertcontroller和push、present到其它界面
- 在NSObject类中,和继承它的类中,弹出UIAlertcontroller和push、present到其它界面
- 在NSObject类中,和继承它的类中,弹出UIAlertcontroller和push、present到其它界面
- iOS 在NSObject的子类中使用UIAlertController
- present和push的区别
- iOS中id与NSObject* 和id<NSObject>的区别
- iOS中id与NSObject* 和id<NSObject>的区别
- iOS中id与NSObject* 和id<NSObject>的区别
- iOS中id与NSObject* 和id<NSObject>的区别
- iOS中id与NSObject* 和id<NSObject>的区别
- 从present的界面push到另一个界面
- Present和Push
- present和push
- 项目中遇到的问题(一)弹出UIAlertController 时出现 Warning: Attempt to present * on * which is already presenting
- VC其它- 在MFC类中各种类的指针的获取和应用
- oc中少见的不继承于NSObject 的类NSProxy?
- oc中少见的不继承于NSObject 的类NSProxy?
- Xcode 6 创建的工程中自定义继承NSObject类,+(UILabel *) 通不过编译
- 使用strip工具减少.so库文件的大小
- 携程工作感言(三)(7.31)
- jQuery中的全局函数getJSON()异步读取数据乱码问题
- hdu 5195 DZY Loves Topological Sorting(线段树)
- Linux下安装软件的一般步骤
- 在NSObject类中,和继承它的类中,弹出UIAlertcontroller和push、present到其它界面
- Android中用native 修饰的方法学习
- VS2013+WDK8.1编写window驱动
- 工作杂谈
- RefreashListView(自定义ListView)
- AngularJSURL参数传递问题
- 统计分析学习之数值分析方法
- Spring是什么
- Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance.