2015-05-28 2 views
1

Я запрограммировал создание UIImage экземпляров, которые увеличиваются по мере увеличения числа отсчетов изображения и UIImage. Поскольку те UIImageView не видны в Раскадке, как я могу перейти от этого UIViewController к другому UIViewController, содержащему экземпляр UIImage, чтобы показать изображение в деталях. Как переходить к другому UIViewController, когда затрагивается какой-либо из моих UIImageView.Как переделать из программно созданного 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); 
+0

вы можете использовать кнопку для этого, так легко управлять нажмите событие изображения –

+0

использования UICollectionView это проще создать макет, используя инструменты, которые уже предусмотрены, чем создать его вручную. – suhit

+0

Всегда лучше публиковать фактический код, чем кучу кодовых файлов, которые не будут компилироваться. – Caleb

ответ

0

Вы можете использовать UICollectionView для показа, изображения. Каждая ячейка имеет идентификатор (например, indexPath от UITableview), поэтому для каждой ячейки, которая будет касаться вас, вы берете это значение и резервируете его как идентификатор ваших изображений. Найдите изображение, подключенное для этого идентификатора, и загрузите его в DetailViewController.

UICollectionView имеет метод, который определяет, какая ячейка была затронута.

Вы можете использовать переменную imgNameArray, используя Singleton. И используя тот же «ID» и отправьте DetailViewController, вы можете загрузить одно и то же изображение.

Это одно из возможных решений.

0

Добавьте UITapGestureRecognizer в каждое ваше UIImageview и определите уникальный тег для каждого Imageview (согласно вашему forloop).

В вас метод жест распознавателя, вы можете получить тег от

[(UIGestureRecognizer *)sender view].tag 

Используйте этот тег, чтобы получить perticular изображение из массива. И performSegue.

2

Независимо от того, как вы настроили контроллер своего вида, контроллер всегда может переходить к другому контроллеру представления, используя -performSegueWithIdentifier:sender:. Так что если вы настроили раскадровку, так что есть переход с идентификатором myDetailSegue, ведущим из массива изображений контроллера представления в контроллер просмотра детализации изображения, контроллер массива изображения может сделать это:

[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:, как и вы, когда используете segues. Этот метод может установить изображение контроллера детального представления на self.detailImage, так как вы мудро сохранили это в действии.

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]; 
     } 
    } 
} 
Смежные вопросы