我想这样做,当我点击UITableViewCell中的图像时,它会推送一个新视图并显示一个你可以操作的UIImageView(例如捏它并展开它)。
目前,我正在使用自定义单元格,以编程方式将图像添加到单元格中:
for (int i = 0; i < [self.news.imgURL count]; i++) {
UIImageView *image = [[UIImageView alloc] init];
[image setImageWithURL:[NSURL URLWithString:[self.news.imgURL objectAtIndex:i]]];
[image setFrame:CGRectMake(20, (labelSize.height + 25 + 14) + (i * 280), 280, 280)];
image.contentMode = UIViewContentModeScaleAspectFit;
image.tag = 101 + i;
image.userInteractionEnabled = YES;
[self.contentView addSubview:image];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
[tap setNumberOfTapsRequired:1]
[image addGestureRecognizer: tap];
}
这位于我的customcell.m文件中。
如上面的代码所示,我使用GestureRecognizer,我可以使用以下代码检测图像的点击:
-(void) handleTap:(UITapGestureRecognizer *)recognizer {
if (recognizer.state == UIGestureRecognizerStateEnded) {
NSLog(@"Image tapped!", nil);
}
}
但我不知道如何从customcell.m文件中推送新视图。有没有办法从customcell.m文件中推送新视图,还是我必须从masterviewcontroller中明确地执行此操作?
答案 0 :(得分:1)
这是使用委托的一个很好的用例。为自定义单元类定义委托协议。然后让您的表视图控制器将其自身设置为单元格的委托。您的协议应该有一个方法告诉代表已经点击了图像。单元格和图像可以是委托方法的参数。
在单元格的handleTap:
方法中,您可以检查委托是否响应协议方法,如果是,则调用委托上的协议,传递自身(单元格)和点击的图像。
答案 1 :(得分:0)
在didSelectRowAtIndexPath
yourViewCon *vc = [[yourViewCon alloc] init];
[self presentModalViewController:vc animated:YES];
答案 2 :(得分:0)
首先,在MyCustomCell.h
@protocol MyCustomCellDelegate;
@interface MyCustomCell : UITableViewCell
@property (nonatomic, weak) id <MyCustomCellDelegate> delegate;
- (void)someCustomMethod:(NSString*)stringForChangingSomethingInMyCell;
@end
@protocol MyCustomDelegate <NSObject>
@required
- (void)itemTappedForRow:(NSUIInteger)rowNumber;
@end
在MyCustomCell.m
中,您合成了委托:
@synthesize delegate = _delegate;
在您的handleTapMethod
:
// You can use self.tag to track rowNumbers
[_delegate itemTappedForRow:rowNumber];
同时在你的表视图controller`中,你符合你刚才定义的协议
@interface MyTableViewController : UITableViewController<MyCustomCellDelegate>
您可以在cellForRowAtIndexPath
:
UITableViewCell *cell = [[MyCustomCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"yoBaby"];
cell.delegate = self;
cell.tag = indexPath.row;
return cell;
最后,在itemTappedForRow
中,您推送一个新的视图控制器,为您完成这些工作。我假设你正在使用导航控制器。
[self.navigationController pushViewController:yourNewViewControllerWithTheImageSelected animated:YES];