iOS 协议使用

这整个是一个cell,框框的放的image(有很多图片,可以左右滑动,我用iCarousel做的,这个的代理写在自定义cell类里面的)。现在需要点击图片进入下一个页面。。。。现在我点击图片,都会进入到自定义cell类里面的代理里,但是cell类里面,是不让我弹出下一个viewcontroller的。。??不然用[self.navigationController pushViewController:show animated:YES];这个方法。

最后用协议实现。当用户点击一个图片的时候,进入到cell类的iCarousel代理方法-(void)carousel:(iCarousel *)carousel
didSelectItemAtIndex:(NSInteger)index在这里把index传给StarShowViewController,然后在StarShowViewController里面做push的动作。

(1)定义协议ImageItemDelegate.h

#import <Foundation/Foundation.h>

@protocol ImageItemDelegate <NSObject]]]]>

-(void)passItem:(NSString*)index;//把点击的是第几个image 的index 传过来

@end

(2)在StarShowViewController.h类里面遵守协议

#import "ImageItemDelegate.h"

@interface StarShowViewController : UIViewController <UITableViewDelegate,UITableViewDataSource,ImageItemDelegate>{

UITableView *starTableView;

NSMutableArray *starArray;

}

(4)在StarShowTableViewCell.h类里面声明一个代理

#import "ImageItemDelegate.h"

@interface StarShowTableViewCell : UITableViewCell <iCarouselDataSource,iCarouselDelegate,UIGestureRecognizerDelegate]]]]>

@property(nonatomic,retain)NSObject <ImageItemDelegate>
*itemDelegate;//声明一个代理

(5)在StarShowTableViewCell.m类里面传值

//选择某个image
item

-(void)carousel:(iCarousel *)carousel
didSelectItemAtIndex:(NSInteger)index{

NSLog(@"index:%ld",(long)index);

NSString *str = [NSString stringWithFormat:@"%ld",index];

UIView *view = carousel.currentItemView;

[self.itemDelegate passItem:str];//通过代理把str传到StarShowViewController类里面

}

(6)在 StarShowViewController.m 里面 表的代理方法 - (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath设置代理

cell.itemDelegate = self;//设置代理

(7)进入到下一个viewcontroller

#pragma mark - ImageItemDelegate

//从cell那边拿到值

-(void)passItem:(NSString *)index{

ShowViewController *show = [[ShowViewController alloc] init];

show.imageIdex = index;

[self.navigationController pushViewController:show animated:YES];

}

----------------------

叫你好好看书,又不好好看书!  实现方法很多种:①、可以在controller里面直接给Image添加点击事件  ②、使用delegate,在当前controller里面实现即可触发点击事件  ③ block 简单  ④ 事件响应者链可以处理

第一种在这里不合适,第三种在这里还没有用过,理论上block也可以传值,考虑到block限制比较多,不使用   第四种事件响应者链不太清楚是怎么回事

时间: 2024-08-29 04:09:17

iOS 协议使用的相关文章

iOS 协议 protocol

iOS中的协议说白了就是方法的声明,只声明不需要实现,实现的部分由遵守协议方完成. 先看个协议的小例子:这个例子是先给出两个协议,再创建两类人遵守协议. 流氓协议(RogueDelegate.h) #import <Foundation/Foundation.h> /**流氓协议*/ @protocol RogueDelegate <NSObject> @required // 必须实现的方法 /**吃*/ - (void) eat; /**骗*/ - (void) lie; @o

iOS协议、代理、Block和回调、类别

[协议](Protocol) //协议是用来规范接口,实现对象间交互的一种机制.类似于JAVA中的接口,可以模拟. 协议的权限 @optional//可选的 @required//必须的 [代理] 一.代理的概念 [注]代理是实现两个类的对象间通信的一种机制. [委托方]主动方 持有带协议的id指针,可以使用协议. [代理方]被动方 遵从协议,实现方法. 代理回调(反向传值) //当我们需要完成某个功能模块,但不知道使用功能模块的是哪个对象,通过协议,可以规定接收数据的对象通过哪个方法获得数据.

iOS 协议delegate分六步

第一步:声明协议 在RootView.h中, @protocol 协议名 <基类> 方法 @end @protocol RootViewDelegate <NSObject> - (void)presentToViewController; @end 第二步:声明代理人 在RootView.h中 //必须是assign,为了防止两个对象之间的循环引用 @property (nonatomic, assign)id<RootViewDelegate>rootDelegat

ios协议和委托

在iPhone开发协议和委托是常接触到的东西,到底什么是协议什么是委托,他们什么关系? 一 协议 (1)协议相当于没有与类相关联的接口,他申明一组方法,列出他的参数和返回值,共享给其他类使用,然后不进行实现,让用它的类来实现这些方法 (2)在任何一个类中,只有声明了协议,都可以实现协议里的方法. (3)协议不是一个类,更没有父类了. (3)协议里面的方法经常都是一些委托方法, 二 委托 委托,故名思议就是托别人办事.打个比方: 张三迫切需要一分工作,但是不知道去哪找.于是他就拜托(委托)李四给帮

ios协议

协议 @protocol 协议名 <NSObject> @end @required 默认类型,必须实现的协议方法 @optional 非必要实现协议方法 oc是弱语法,即使required也可以不是先,这个是个关键字,标记实现的必要程度 如果一个类遵守了协议,那么这个类的实例对象 id<protocol> 对象1 = 实现了这个协议的对象2: 对象1 必须指向实现了protocol的对象2,否则将不能够成功 我的理解,对象一的消息方法列中拥有协议方法(method),所以能发送协

IOS 协议

一.协议 在ObjC中使用@protocol定义一组方法规范,实现此协议的类必须实现对应的方法.熟悉面向对象的童鞋都知道接口本身是对象行为描述的协议规范.也就是说在ObjC中@protocol和其他语言的接口定义是类似的,只是在ObjC中interface关键字已经用于定义类了. (一)协议注意几点: 1.一个协议可以扩展自另一个协议,例如有的协议是扩展自NSObject,如果需要扩展多个协议中间使用逗号分隔: 2.和其他高级语言中接口不同的是协议中定义的方法不一定是必须实现的,我们可以通过关键

iOS 协议使用(二)

ShowViewController在PopViewController拿值.注意设置代理(委托)?就像,我没有委拖你替我办事,你去银行,或者去政府替我办事,人家当然不会处理你 (1)PopViewController.h #import <UIKit/UIKit.h> //定义协议 @protocol popNextDeleage <NSObject]]]]> -(void)passPopReport:(NSString*)string; @end @interface PopV

ios 协议(delegate)使用过程中遇到assign attribute must be unsafeunretained

今天在使用协议的过程中,偶然发现这样使用 @interface AppDelegate (){ id<ChatDelegate> testdelegate; } @property (nonatomic , assign) id<ChatDelegate> testdelegate; @end @implementation AppDelegate @synthesize testdelegate; 会报错: Existing instance variable 'delegate

iOS 协议分发

Github:AOMultiproxier.HJProtocolDispatcher 协议实现分发器,能够轻易实现将协议事件分发给多个实现者. 一.AOMultiproxier.h #define AOMultiproxierForProtocol(__protocol__, ...) ((AOMultiproxier <__protocol__> *)[AOMultiproxier multiproxierForProtocol:@protocol(__protocol__) withObj