Unable to assign images to an imageView from an Array
Hi all, I have a problem with arrays and passing images between views that I would like some help on! So the background is that I have:
• RootViewController (which handles my table view)
• CommunicationViewController which handles the detail of the selected element from the table
• SelectSlideViewController which displays an image clicked on from the CommunicationViewController and allows the user to select a different one from the camera roll
So the problem:
• In the CommunicationViewConroller, I have the following code if the user clicks on a button:
And the above code works, if for, example, I click on button 5, as it sets image5 to the view in the “SelectSlideViewController”.
However, I would like to have multiple buttons using the same “selectSlide” action – and to do that, I need to figure out which button was pressed, and then assign the correct image to the “SelectSlideViewController” from an array of images (or a series of if-else statements which is clunky).
• So my revised code is as follows, but it doesn’t work with the array – any thoughts?:
Code:
- (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;
**/
}
There is a "tag" property that you can assign to each button. It is an integer, and it will make it unnecessary to anything so clunky as using indexOfObject to determine which button was clicked. You can assign the tag value at the time that the button is created, or, if you are using IB to create the buttons, there is a tag field you can fill out.
Thanks for that - I will use that feature rather than going through an array to find out which button was clicked. However, how do I assign the correct image from a different array to the new UIImageView, based on which button was clicked (remember, I have 2 arrays, one that corresponds to the buttons, and other that corresponds to the images displayed on the buttons).
This is the code that does something with the images:
Code:
- (void) selectSlide
{
self.selectSlideView.imageView.image = myImage1; //this works
self.selectSlideView.imageView.image = [imageArray objectAtIndex:1]; //doesn't work
NSLog(@"This is the image array size %d ",[imageArray count]); //this outputs value of "9"
}
So it could be that the imageArray is not being retained - but how do I ensure it is being retained?
Quote:
Originally Posted by trilithium
Hi Scott,
Thanks for that - I will use that feature rather than going through an array to find out which button was clicked. However, how do I assign the correct image from a different array to the new UIImageView, based on which button was clicked (remember, I have 2 arrays, one that corresponds to the buttons, and other that corresponds to the images displayed on the buttons).
Further to this post, I have just realised the following:
It turns out that using the array method does work, however I observe the following behaviour: -
I click on a button which should diplay a new view with a larger version of the image on the button - When I run the simulator, the first button press always results in an image not being displayed in the new view - However if I go back and click on the same button (or indeed another button) for all subsequent clicks, the correct image is displayed.
Only the first button press fails (and i have tried different buttons, but same result).
So for whatever reason, it takes two attempts before the imageView.image is assigned:
Hi all, I have a problem with arrays and passing images between views that I would like some help on! So the background is that I have:
• RootViewController (which handles my table view)
• CommunicationViewController which handles the detail of the selected element from the table
• SelectSlideViewController which displays an image clicked on from the CommunicationViewController and allows the user to select a different one from the camera roll
So the problem:
• In the CommunicationViewConroller, I have the following code if the user clicks on a button:
And the above code works, if for, example, I click on button 5, as it sets image5 to the view in the “SelectSlideViewController”.
However, I would like to have multiple buttons using the same “selectSlide” action – and to do that, I need to figure out which button was pressed, and then assign the correct image to the “SelectSlideViewController” from an array of images (or a series of if-else statements which is clunky).
• So my revised code is as follows, but it doesn’t work with the array – any thoughts?:
Code:
- (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;
**/
}
I click on a button which should diplay a new view with a larger version of the image on the button - When I run the simulator, the first button press always results in an image not being displayed in the new view - However if I go back and click on the same button (or indeed another button) for all subsequent clicks, the correct image is displayed.
is selectSlideView.imageView loaded from a nib? if so, that's the problem. the view isn't loaded the first time through.
try putting
[selectSlideView view];
before setting the imageview to force the nib loading to happen.
You were spot on! Looks like this has resolved the issue. Once again, apologies for the delay in replying, but haven't had a chance to devote time to the iPhone app.
Thanks, and best Regards.
Quote:
Originally Posted by jsd
is selectSlideView.imageView loaded from a nib? if so, that's the problem. the view isn't loaded the first time through.
try putting
[selectSlideView view];
before setting the imageview to force the nib loading to happen.