无法将图像分配给Array中的imageView,但可以从UIImage变量将图像分配给imageView

时间:2009-11-10 11:24:58

标签: iphone uiimageview uiimage nsarray

我有一个数组问题,并在视图之间传递图像,我希望得到一些帮助! 所以背景是我有:

•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 :(得分:0)

您可以尝试在第一次直接加载图像,然后再缓存。 (我已经排除了缓存代码和缩放代码,但您可以在获得图像后添加它们)。

   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;
    }

答案 1 :(得分:0)

以上是上述问题的解决方案(来自www.iphonedevsdk.com的“JSD”):

由于selectSlideView.imageView是从笔尖加载的,因此第一次没有加载视图。

在将我的Array中的图像分配给视图之前,我必须包含以下代码行:

[selectSlideView view];