IOS中在自定义控件(非视图控制器)的视图跳转中 代理方法与代码块的比较

//代码块与代替代理的设计方法

我就以在自定义视图中(非视图控制器,不能实现视图控制功能),通过代理和代码块两种方法分别实现视图的跳转,进行对比

首先自定义了一个视图,上面有一个已经注册了得BUtton点击监控事件方法-(void)event{};视图的跳转就在这个方法中实现(注意:这个button不在视图控制器里面,就算导了相关头文件,也不能跳转,所以只能通过代理方法,或者代码块等,在这个button(在自定义控件空,非视图控制器)方法中调用相关方法,在视图控制器中去实现)

代理实现方法:

在.h文件中

1,在这个自定义视图中(我再说一遍,这里不是视图控制器,要是视图控制器就不用这么折腾了),声明协议

@protocol Delegate <NSObject>

@optional
   - (void)jump;//一个用来视跳转的方法

@end

2,定义属性

@property(nonatomic,weak)id<Delegate>delegate;//名字随便取,习惯用delegate(注意:<Delegate>是上面写的协议,只有这样delegate才便于调用jump方法)

在.m文件中

Button的监控方法-(void)event{};就在这里

-(void)event{

if (self.delegate && [self.delegate respondsToSelector:@selector(jump)])

[self.delegate jump];//当Button按下就执行这里

};//代理的定义就这样完成了!!!!!!

视图的跳转的实现,我们放在了视图控制器中

对上面的自定义视图进行实例化 通过   ***.delegate = self;(这里是使当前self与上面红色的标注的self.delegate指针一致,self.delegate调用jump方法,其实就是当前的self调用该方法)然后在jump方法中直接实现试图跳转就行了

(其实讲到这里,就不用再讲了,因为后边的大家都知道了,大家需要的是上面代理定义处的东西)

那么代码块如何实现了,其实比代理要简单些

来个类型定义

.h文件中

1.typedef void (^block)();

2.定义属性@property(nonatomic,string)block jump;//注意:不带*

.m文件中

3.-(void)event{

self.jump();

};//就这样定义结束了

在视图控制器中的实现结构稍有区别

***.jump = ^{

//实现部分

};

是不是代码块比代理简单啊

时间: 2024-10-22 09:03:19

IOS中在自定义控件(非视图控制器)的视图跳转中 代理方法与代码块的比较的相关文章

学习方法和阶段介绍 、 iOS界面开发引入 、 构造第一个App 、 视图控制器和视图 、 控件与事件 、 InterfaceBuilder

1 创建并运行第一个App 1.1 问题 使用Xcode创建一个App项目,该应用实现功能在界面上显示Hello World标签,在模拟器中的运行结果如图-1所示: 图-1 1.2 方案 分析图-1,首先使用Xcode创建一个Single ViewApplicaton应用,起名为MyFirstApp,如图-2所示: 图-2 然后删除Xcode的导航栏里只保留TRAppDelegate.h文件和TRAppDelageat.m文件,其他代码文件.storyboard文件以及xib文件删除,如图-3所

iOS CoCoa编程中视图控制器与视图类(转)

分类: iPhone2012-05-28 11:19 837人阅读 评论(0) 收藏 举报 cocoa编程iosuinavigationcontrolleruiviewiphone iPhone编程规则是:一个窗口,多个视图. UIView是iPhone屏幕上很多控件的基础类.每个iPhone用户界面都是由显示在UIWindow(这其实也是个特殊的UIView)内的众多UIView及其专门化子类构建的. 显示数据的视图: UITextView UILabel UIImageView UIWebV

【iOS开发-30】UITabBarController的几种代理方法以及结合NSUserDefaults还原上次退出时被选中视图控制器和视图控制器的顺序

一.UITabBarController的几种代理方法 在AppDelegate.h中加入一个协议<UITabBarControllerDelegate>,然后再AppDelegate.m中添加如下代理方法: 如果没有效果,可能是缺少tbCon1.delegate=self;把代理指定给当前AppDelegate. -(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:

iOS 页面跳转传值,属性传值,代理传值,代码块传值,单例传值,通知传值

有时候我们在页面跳转的时候回传递相应的参数,如,你想把在第一个页面的文本框里的内容显示在第二个文本框中,或者你又想把第二个文本框中的内容改变之后到第一个页面的文本框中,所有,这个时候我们就要用到页面跳转传值 1.属性传值(正向传值) 属性传值是正向传值,只可以从前面一个页面传递到第二个页面,不可以从第二个页面传递到第一个页面 2.代理传值(逆向传值) 代理传值是逆向传值 代理传值步骤 代理传值 适用于 反向传值 1.1 创建协议 及协议方法 在反向传值的页面(SecondViewControll

iOS之项目常见文件、UIApplication详解及UIApplicationDelegate的代理方法

1 一.项目常见文件 2 1.main.m 3 * 里面有一个程序的入口:main函数 4 5 2.Prefix.pch文件 6 * pch文件中的内容 能被 项目中的其他任何文件 共享\包含\访问 7 * 如果定义的内容只用在OC环境中,就必须定义在#ifdef __OBJC__和#endif之间 8 9 3.发布程序的时候自动去除打印语句 10 #ifdef DEBUG 11 #define MyLog(...) NSLog(__VA_ARGS__) 12 #else 13 #define

IOS开发UI篇-NavigationController的控制器之间的跳转

一.效果图如下 1> 第一个控制器的NavigationBar隐藏 2> 有按钮,可以跳转到下一个控制器,返回上一个控制器或者根控制器 二.思路代码 思路: 1> 设置window的跟控制器为navigationController 2> 设置一个控制器的基类 主要代码实现如下: AppDelegate.m // // AppDelegate.m // navigation的简单实用(纯代码) // // Created by gxiangzi on 15/8/7. // Copy

控制器的回跳的两个方法

[self.navigationController popViewControllerAnimated:YES];  前者是跳回到上一个控制器,它是一环一环的跳过去的 [self.navigationController popToRootViewControllerAnimated:YES]; 后者是跳回到他的根控制器,即为从最里面的控制器直接跳到最外面的控制器

tableView中当我们向右滑动不出现删除按钮(实现了代理方法)的原因

原因就是  view视图比屏幕的视图更大  因此看不到删除按钮  可能有以下情况导致的 1.xib文件创建 自动布局   创建的view视图是600*600的   因此那个删除按钮已经出现了   只是在屏幕上看不到而已 2.设置self.tableview.frame属性为  self.view.frame  这样tableview的大小就是600*600 肯定就看不到删除按钮了

[转]iOS开发之视图控制器(UIViewController)

视图控制器应该在MVC设计模式中扮演控制层(C)的角色,UIViewController的职责对内管理与之关联的View,对外跟其他UIViewController通信和协调.一个视图控制器管理一个视图(它可以有子视图),其view属性指向它所管理的视图.UIViewController类可以有子类,可以使用一个系统的UIViewController子类或者直接自己创建一个UIViewController的子类. 使用代码创建控制器和视图. 开始创建一个基于窗口的Empty Applicatio