标签:ios 协议使用 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限制比较多,不使用 第四种事件响应者链不太清楚是怎么回事
iOS 协议使用
标签:ios 协议使用 ios 代理使用
原文地址:http://blog.csdn.net/u010241322/article/details/39374575