0

我想这样做,所以当我点击 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 显式执行它?

4

3 回答 3

1

这是使用委托的一个很好的用例。为您的自定义单元类定义一个委托协议。然后让您的表格视图控制器将自己设置为单元格的代表。你的协议应该有一个方法告诉代理一个图像被点击了。单元格和图像可以是委托方法的参数。

在您的单元格的handleTap:方法中,您可以检查委托是否响应协议方法,如果有,它会调用委托上的协议,传递自身(单元格)和点击的图像。

于 2013-02-07T16:05:30.003 回答
0

在单元格点击方法或中编写以下代码didSelectRowAtIndexPath

yourViewCon *vc = [[yourViewCon alloc] init];
[self presentModalViewController:vc animated:YES];
于 2013-02-07T15:14:33.410 回答
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];

同时在您的表格视图控制器中,您符合您刚刚定义的协议

@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];
于 2013-02-07T16:21:06.710 回答