Solved

Modify UIToolBarItem image

Posted on 2011-09-30
17
687 Views
Last Modified: 2012-06-21
Hello EE Mac,

I have a UIToolBarItem at the buttom and if the user presses it, it update a value in my DataBase.
What I would like is a new image appears on that same Item so the user knows it has been pressed if he goes back to see the current page.

Actually, it a kind of "Like"   like in Facebook. so when he presses, I would lile to see an image of a Thumbs up. if he presses again, It would be an image of "Like me!"    you know ?

How can I change this without creating a new Item or maybe I could have 2 UITOolbarItem at the same X Y  and one is visible the other is not?

: /
0
Comment
Question by:PhilippeRenaud
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 9
  • 8
17 Comments
 
LVL 13

Expert Comment

by:SpeedyApocalypse
ID: 36895582
You can use the setImage: method of the UIToolBarItem.

[[myViewController tabBarItem] setImage:[UIImage imageNamed:@"anImage.png"]];

Open in new window

0
 
LVL 1

Author Comment

by:PhilippeRenaud
ID: 36899488
so I can recall it by the index? when you write tabBarItem you mean the name of it?/ the index of it?
0
 
LVL 13

Expert Comment

by:SpeedyApocalypse
ID: 36899655
tabBarItem is a property of your view controller.
0
On Demand Webinar: Networking for the Cloud Era

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

 
LVL 1

Author Comment

by:PhilippeRenaud
ID: 36899668
Ok but I am trying to figure out how do I recall the item I want to change the image?
Lets say I have 4 of them, and the 3rd one on the left is the one i need to change..?
0
 
LVL 13

Expert Comment

by:SpeedyApocalypse
ID: 36899689
Where do you change the image?  Are you in the viewController that the tab represents?
0
 
LVL 1

Author Comment

by:PhilippeRenaud
ID: 36899696
Yes, I have a @selector on the tabBarItem image  called buttonHit

and in it this is where I would like to change the image.

But I just remembered that i pass  (id) sender     and I guess I could use that?  Not sure how tho..
0
 
LVL 13

Expert Comment

by:SpeedyApocalypse
ID: 36899699
Could you post your code please?
0
 
LVL 13

Expert Comment

by:SpeedyApocalypse
ID: 36899700
So you are simply tapping the tab bar, and it could be in any tab?
0
 
LVL 1

Author Comment

by:PhilippeRenaud
ID: 36899706
this is how I create the BarButtonItem.

    UIImage *likeImage = [UIImage imageNamed:@"240x320-thumbs-up.png"];
    UIButton *likeButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [likeButton setImage:likeImage forState:UIControlStateNormal];
    [likeButton addTarget:self action:@selector(likeButtonHit:) forControlEvents:UIControlEventTouchDown];
   
    likeButton.frame = CGRectMake(0, 0, likeImage.size.width, likeImage.size.height);
                                 
    UIBarButtonItem *like = [[UIBarButtonItem alloc] initWithCustomView:likeButton];

little after I do this line:

            [self setToolbarItems:[NSArray arrayWithObjects:fixedLeft, flex, left, fixedCenter, right, flex, like, action, nil]];



then on the actionSelector:


-(void)likeButtonHit:(id)sender{
change image here....
}
0
 
LVL 13

Accepted Solution

by:
SpeedyApocalypse earned 500 total points
ID: 36899718
With your sender, just set the image.

[sender setImage:[UIImage imageNamed:@"anImage.png"] forState:UIControlStateNormal];

Open in new window


You can also add some code to  see what it currently is.

if ([sender imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"anImage.png"]) {
    [sender setImage:[UIImage imageNamed:@"anotherImage.png"] forState:UIControlStateNormal];
} else {
    [sender setImage:[UIImage imageNamed:@"anImage.png"] forState:UIControlStateNormal];
}

Open in new window

0
 
LVL 1

Author Comment

by:PhilippeRenaud
ID: 36899725
but will I be able to change the image of the UIImage? because remember in my code i need to create an UIImage and a UIButton to get a colored barButtonItem otherwise its blank.. ?
0
 
LVL 13

Expert Comment

by:SpeedyApocalypse
ID: 36899729
That code changes the button's image.  You can also iterate through the tabBar toolbarItems array and change the custom view altogether.
0
 
LVL 1

Author Comment

by:PhilippeRenaud
ID: 36899757
ok . just one last thing.  when I start to write your code, after writing sender i do not see imageForState when I press ESC
0
 
LVL 13

Expert Comment

by:SpeedyApocalypse
ID: 36899758
Try typecasting it.  [(UIButton *)sender imageForStat...];
0
 
LVL 1

Author Comment

by:PhilippeRenaud
ID: 36899778
Do you see the error??

    if([(UIButton*)sender imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"240x320-thumbs-up.png"]){
       
    }

expected ) before isEqual

looks fine to me..?
0
 
LVL 13

Expert Comment

by:SpeedyApocalypse
ID: 36899781
My bad.  Typing on the browser is unreliable at best.

if([[(UIButton*)sender imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"240x320-thumbs-up.png"]]){
        
    }

Open in new window

0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

     Intro      In this article, I will show you how to parse a JSON in Swift using an open source library called SwiftyJSON (https://github.com/SwiftyJSON/SwiftyJSON). If you haven't heard of a JSON before, it stands for JavaScript Object Notation…
The release of the iPhone 6 and the iPhone 6 Plus was extremely successful for Apple. However when iOS 8.1 was introduced, many iPhone users complained of quick battery drainage. Without even knowing, you may be unnecessarily using up your battery p…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.
This is my first video review of Microsoft Bookings, I will be doing a part two with a bit more information, but wanted to get this out to you folks.

691 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question