我已经以编程方式创建了UIImage
个实例,这些实例随着imageArray数量的增加而增加,并且UIImage
以编程方式设置为它们。由于这些UIImageView
在故事板中不可见,我如何从UIViewController
转到包含UIViewController
实例的另一个UIImage
以详细显示图片。如果触摸了UIViewController
任何一个UIImageView
,如何转移到另一个#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);
。
以下是代码:
library(readr)
data <- read_csv(file="train.csv")
答案 0 :(得分:2)
无论您如何设置视图控制器,控制器始终可以使用-performSegueWithIdentifier:sender:
转换到另一个视图控制器。因此,如果您已设置故事板以使标识符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
操作执行操作。您还需要一个-prepareForSegue:sender:
方法,就像您在使用segue时一样。该方法可以将详细视图控制器的图像设置为self.detailImage
,因为您明智地将其保存在操作中。
答案 1 :(得分:0)
您可以使用UICollectionView
来显示图片。每个单元格都有一个标识符(如indexPath
中的UITableview
),因此,对于每个将触及的单元格,您将获取此值并将其保留为图像的ID。搜索为此ID连接的图片,然后加载到DetailViewController
。
UICollectionView
有一种方法可以检测到哪个细胞被触摸过。
您可以使用Singleton共享imgNameArray
变量。使用相同的“ID”并发送到DetailViewController
,您可以加载引用的相同图像。
这是一种可能的解决方案。
答案 2 :(得分:0)
为每个UIImageview添加UITapGestureRecognizer,并为每个Imageview定义唯一标记(根据你的forloop)。
在手势识别器方法中,您可以通过
获取标记[(UIGestureRecognizer *)sender view].tag
使用此标记从阵列中获取特定图像。 并执行Segue。
答案 3 :(得分:0)
您可以像下面这样使用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];
}
}
}