這整個是一個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
@protocol ImageItemDelegate -(void)passItem:(NSString*)index;//把點擊的是第幾個image 的index 傳過來 @end (2)在StarShowViewController.h類裡面遵守協議 UITableView *starTableView; } (4)在StarShowTableViewCell.h類裡面聲明一個代理 @interface StarShowTableViewCell : UITableViewCell @property(nonatomic,retain)NSObject (5)在StarShowTableViewCell.m類裡面傳值 //選擇某個image item NSLog(@"index:%ld",(long)index); UIView *view = carousel.currentItemView; [self.itemDelegate passItem:str];//通過代理把str傳到StarShowViewController類裡面 } (6)在 StarShowViewController.m 裡面 表的代理方法 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath設置代理 (7)進入到下一個viewcontroller #pragma mark - ImageItemDelegate ShowViewController *show = [[ShowViewController alloc] init]; } ----------------------
#import "ImageItemDelegate.h"
@interface StarShowViewController : UIViewController
NSMutableArray *starArray;
#import "ImageItemDelegate.h"
-(void)carousel:(iCarousel *)carousel didSelectItemAtIndex:(NSInteger)index{
NSString *str = [NSString stringWithFormat:@"%ld",index];
cell.itemDelegate = self;//設置代理
//從cell那邊拿到值
-(void)passItem:(NSString *)index{
show.imageIdex = index;
[self.navigationController pushViewController:show animated:YES];
叫你好好看書,又不好好看書! 實現方法很多種:①、可以在controller裡面直接給Image添加點擊事件 ②、使用delegate,在當前controller裡面實現即可觸發點擊事件 ③ block 簡單 ④ 事件響應者鏈可以處理
第一種在這裡不合適,第三種在這裡還沒有用過,理論上block也可以傳值,考慮到block限制比較多,不使用 第四種事件響應者鏈不太清楚是怎麼回事