2009-11-10 81 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

相關問題