[英]How do I segue from programmatically created UIImageView
我已经以编程方式创建了UIImage
实例, UIImage
实例随着imageArray计数的增加而增加,并且以编程方式将UIImage
设置为它们。 由于这些UIImageView
中不可见的故事板,我怎样才能从Segue公司UIViewController
另一个UIViewController
包含的一个实例UIImage
显示详细图像。 当我的任何UIImageView
被触摸时,如何选择另一个UIViewController
。
这是代码:
#import "FirstPageViewController.h"
@interface FirstPageViewController ()
@property (nonatomic, strong) UIImageView *imageView;
@property UIImage *image;
@property NSArray *imgArray;;
@property NSMutableArray *imgNameArray;
@property UIView *containerView;
@property UIView *containerView2;
@end
@implementation FirstPageViewController
for (NSString *img in imgArray) {
[imgNameArray addObject:img];
}
int Y = 0;
int X = 0;
for (int i = 0; i<imgNameArray.count; i++) {
NSString *imgName = imgNameArray[i];
UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:imgName]];
imageView.frame = CGRectMake(X, Y, 145, 109);
imageView.layer.cornerRadius = 2;
imageView.clipsToBounds = YES;
[imageView.layer setBorderWidth:2];
[imageView.layer setBorderColor:[[UIColor whiteColor]CGColor ]];
if ((i%2)==0) {
X = 154;
}else {
X = 0;
}
if ((i%2) ==0) {
Y = i * 59;
}
[containerView addSubview:imageView];
}
[self.scrollView addSubview: containerView];
self.scrollView.contentSize = CGSizeMake(320, imgNameArray.count * 67);
无论您如何设置视图控制器,该控制器始终可以使用-performSegueWithIdentifier:sender:
来选择另一个视图控制器。 因此,如果您已设置情节myDetailSegue
以使标识为myDetailSegue
的segue从图像阵列视图控制器通向图像细节视图控制器,则图像阵列控制器可以执行以下操作:
[self performSegueWithIdentifier:@"myDetailSegue" sender:self];
因此,处理任务的一种方法是在图像阵列控制器中创建一个动作:
-(IBAction)goToDetailController:(UIGestureRecognizer*)sender {
// get the image view from the gesture recognizer
UIImageView *tappedView = (UIImageView*)sender.view;
// save the image from the image view
self.detailImage = tappedView.image;
// start the detail segue
[self performSegueWithIdentifier:@"myDetailSegue" sender:self];
}
现在,您只需要在每个图像视图上附加一个手势识别器,即可将其目标设置为图像阵列视图控制器,并将操作设置为新的goToDetailController
操作。 就像使用segues一样,您还需要-prepareForSegue:sender:
方法。 该方法可以将细节视图控制器的图像设置为self.detailImage
,因为您明智地将其保存在了动作中。
您可以使用UICollectionView
来显示图像。 每个单元格都有一个标识符(例如indexPath
的UITableview
),因此,对于每个要触摸的单元格,将使用此值并将其保留为图像的ID。 在连接的图像中搜索此ID,并将其加载到DetailViewController
。
UICollectionView
具有一种检测已触摸哪个单元格的方法。
您可以使用Singleton共享imgNameArray
变量。 并使用相同的“ ID”并将其发送到DetailViewController
,您可以加载引用的相同图像。
这是一种可能的解决方案。
将UITapGestureRecognizer添加到每个UIImageview中,并为每个Imageview定义唯一的标签(根据您的forloop)。
在手势识别器方法中,您可以通过
[(UIGestureRecognizer *)sender view].tag
使用此标签可以从阵列中获取垂直图像。 并执行Segue。
您可以在下面使用UIButton。
设置其BG图像,并标记每个按钮。
然后在其选择器中,检查标记以确定要传递的图像。
UIButton *btn = [[UIButton alloc] initWithFrame:BUTTON_RECT];
[btn setBackgroundImage:YOUR_IMAGES forState:UIControlStateNormal];
[btn addTarget:self action:@selector(handlePushEvent:) forControlEvents:UIControlEventTouchUpInside];
[btn setTag:i]; // you can set your defined tag here plus int i in your loop
.
.
.
[self.scrollView addSubview:btn];
- (void) handlePushEvent:(UIButton *)sender
{
// PERFORM SEGUE HERE or YOU CAN ALSO PUSH THE VC
int btnTag = sender.tag;
for(int ctr=0; ctr<imgNameArray.count; ctr++)
{
if(ctr == btnTag) {
NextViewController *nextVC = [[NextViewController alloc] initWithNibName:nil bundle:nil];
nextVC.passedImage = imgNameArray[ctr]; // create a property in your next VC, then assign like this here
[self.navigationController pushViewController:nextVC animated:YES];
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.