如何从编程创建的UIImageView

时间:2015-05-28 04:53:05

标签: ios objective-c iphone xcode segue

我已经以编程方式创建了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")

4 个答案:

答案 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];
        }
    }
}