2009-11-10 59 views
0

我有一个数组问题,并在视图之间传递图像,我希望得到一些帮助! 所以背景是我有:无法将图像分配给ArrayView中的imageView,但可以将图像分配给来自UIImage变量的imageView

•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,因为它集图像5到视图在“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语句进行访问,它会显示它。

+0

我想看看你初始化和加载imageArray。 另外,不相关的,而不是tmpInt = [buttonArray indexOfObject:sender];你可以使用按钮的标签字段来存储索引。 – mahboudz 2009-11-10 11:38:38

+0

谢谢mahboudz - 我会看标签字段。我已经发布了一些关于如何加载imageArray的代码,进一步向下。 对于标签 - 所有的UI对象都必须具有唯一的标签,还是只对同一类类型的UI对象很重要 - 即所有的UIButton都有独特的标签,但是UIImage使用相同的标签号码(例如)。 – trilithium 2009-11-10 12:43:36

+0

您分配标签,如果您使它们唯一,它们是唯一的。例如:myButton.tag = 99; – Jordan 2009-11-10 14:17:25

回答

0

这里是解决上述问题(贷记 “JSD” 从www.iphonedevsdk.com):

由于selectSlideView。 imageView是从一个笔尖加载的视图没有加载第一次通过。

我必须包括下面的代码行之前,我指定的图像从我的阵列的观点:

[selectSlideView view]; 
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; 
    } 
+0

谢谢 - 我会试试这个并回复你 - 看起来像是一个干净利落的做法。我想知道哪里出了错阵列虽然。我之前已经完成了Java编程,但是这个Objective-C的东西稍有不同,所以它可能会让人有点困惑...... – trilithium 2009-11-10 12:40:33

+0

所以我尝试了这一点,但它没有奏效。只是让我理解代码 - 执行此代码时,如果tmpInt = 1,它是寻找名为myImage1的文件,还是寻找名为myImage1的变量? 不幸的是,我还没有得到关于在这个阶段引发的异常的细节。有什么想法吗? – trilithium 2009-11-10 13:31:09

+0

我没有添加当然的扩展名。 – Jordan 2009-11-10 13:40:45

相关问题