Невозможно назначить изображения для imageView из массива, но можно назначить изображения для imageView из переменной UIImage - PullRequest
0 голосов
/ 10 ноября 2009

У меня проблема с массивами и передачей изображений между видами, по которым мне нужна помощь! Таким образом, фон, который у меня есть:

• RootViewController (который обрабатывает мое табличное представление)

• CommunicationViewController, который обрабатывает детали выбранного элемента из таблицы

• SelectSlideViewController, который отображает изображение, на которое щелкают мышью из CommunicationViewController, и позволяет пользователю выбрать другое изображение из списка камер

Итак, проблема:

• В CommunicationViewConroller у меня есть следующий код, если пользователь нажимает кнопку:

- (IBAction) selectSlide:(id) sender
{
 if(self.selectSlideView == nil)
 {
 SelectSlideViewController *viewController = [[SelectSlideViewController alloc]
           initWithNibName:@"SelectSlideViewController" bundle:[NSBundle mainBundle]];
  self.selectSlideView = viewController;
  [viewController release];
 }

 [self.navigationController pushViewController:self.selectSlideView animated:YES];
 self.selectSlideView.cmn = cmn;
 self.selectSlideView.title = cmn.name;
 self.selectSlideView.imageView.image = self.myImage5;
}

И приведенный выше код работает, если, например, я нажму кнопку 5, так как он устанавливает image5 для представления в «SelectSlideViewController».

Однако мне бы хотелось иметь несколько кнопок, использующих одно и то же действие «selectSlide» - и для этого мне нужно выяснить, какая кнопка была нажата, а затем назначить правильное изображение «SelectSlideViewController» из массива изображения (или ряд операторов if-else, которые неуклюжи).

• Итак, мой пересмотренный код выглядит следующим образом, но он не работает с массивом - есть мысли?:

- (IBAction) selectSlide:(id) sender
{
 if(self.selectSlideView == nil)
 {
 SelectSlideViewController *viewController = [[SelectSlideViewController alloc]
             initWithNibName:@"SelectSlideViewController" bundle:[NSBundle mainBundle]];
  self.selectSlideView = viewController;
  [viewController release];
 }

 NSUInteger tmpInt = -1;
 tmpInt = [buttonArray indexOfObject:sender];

 [self.navigationController pushViewController:self.selectSlideView animated:YES];
 self.selectSlideView.cmn = cmn;
 self.selectSlideView.title = cmn.name;

 NSLog(@"The int was %d",tmpInt);
 NSLog(@"This is the image array size %d ",[imageArray count]); 

 If(tmpInt >-1 && tmpInt <9)
 {
  self.selectSlideView.imageView.image = [imageArray objectAtIndex:tmpInt];
 }
 /** this code works, but is a bit clunky:
 if(tmpInt == 0)
  self.selectSlideView.imageView.image = self.myImage1;
 else if (tmpInt == 1)
  self.selectSlideView.imageView.image = self.myImage2;
 else if (tmpInt == 2)
  self.selectSlideView.imageView.image = self.myImage3;
 else if (tmpInt == 3)
  self.selectSlideView.imageView.image = self.myImage4;
 else if (tmpInt == 4)
  self.selectSlideView.imageView.image = self.myImage5;
 else if (tmpInt == 5)
  self.selectSlideView.imageView.image = self.myImage6;
 else if (tmpInt == 6)
  self.selectSlideView.imageView.image = self.myImage7;
 else if (tmpInt == 7)
  self.selectSlideView.imageView.image = self.myImage8;
 else if (tmpInt == 8)
  self.selectSlideView.imageView.image = self.myImage9; 
 **/
}

Я определенно подтвердил, что imageArray имеет размер 9 и что он выбирает правильный индекс из массива, однако SelectSlideViewController не отображает изображение, если к нему обращаются из массива. Он отображается, если к нему обращаются с помощью неуклюжих операторов if-else.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2009

Вот решение вышеуказанной проблемы (зачислено на «JSD» с www.iphonedevsdk.com):

Поскольку файл selectSlideView.imageView был загружен из пера, представление не было загружено с первого раза.

Мне пришлось добавить следующую строку кода, прежде чем я назначил изображения из массива для представления:

[selectSlideView view];
0 голосов
/ 10 ноября 2009

Вы можете попытаться загрузить изображения непосредственно в первый раз, а затем кэшировать их позже. (Я исключил кеширующий код и код масштабирования, но вы можете добавить их после получения изображения).

   If(tmpInt >-1 && tmpInt <9)
     {
      // Check if already cached
         self.selectSlideView.imageView.image = [self getButtonImages:tmpInt];
      // add scaling code here for smaller image

     }

В @implementation вы можете добавить:

 - (UIImage) getButtonImages:(NSInteger)index
    {   
        UIImage* myImage = [UIImage imageNamed:@"image%d.jpg", index];
        return myImage;
    }
...