繁体   English   中英

如何通过自定义单元格中以编程方式添加的UiImageViews推送新视图

[英]How to push a new view tapping programmatically added UiImageViews in a custom cell

我想这样做,以便当我点击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显式地进行操作?

这是使用委托的好用例。 为您的自定义单元格类定义一个委托协议。 然后,将您的表视图控制器设置为单元的委托。 您的协议应具有一种方法,该方法告诉委托人图像已被窃听。 单元格和图像可以是委托方法的参数。

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

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

yourViewCon *vc = [[yourViewCon alloc] init];
[self presentModalViewController:vc animated:YES];

首先,您在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];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM