Change image on button click in ios - ios

I have four buttons on a view controller..ViewControllerA.On click of ecah button a viewcontroller in container view opens.I want when button A is clicked then the image on button A changes and image on button B,C,D remains same .when button B is clicked then the image on button B changes and image on buttonA,C,D remains same.
when button C is clicked then the image on button C changes and image on buttonA,B,D remains same.when button D is clicked then the image on button A changes and image on buttonA,B,C. remains same
- (IBAction)AClick:(id)sender {
[_A_btn setImage:[UIImage imageNamed:#“Ahover.png"] forState:UIControlStateNormal];
[_B_btn setImage:[UIImage imageNamed:#“B.png"] forState:UIControlStateHighlighted];
[_C_btn setImage:[UIImage imageNamed:#“C.png"] forState:UIControlStateSelected];
[_D_btn setImage:[UIImage imageNamed:#“D.png"] forState:UIControlStateSelected];
__A_btn.showsTouchWhenHighlighted = YES;
}
I ma following this code .kindly suggest the changes required as it is not working as desired.

first set images for buttons for required states as well, and u can change state of the button on click as follows , it will show the image of that state.
- (IBAction)AClick:(UIButton *)sender {
sender.selected = !sender.selected;
}

Related

Create checkbox

Below is my implementation code:-
[self.tncCheckBoxLabel setTitle:#"Accept Terms and Conditions" forState:UIControlStateNormal];
[self.tncCheckBoxLabel setImage:[UIImage imageNamed:#"Unchecked Checkbox Filled-50.png"] forState:UIControlStateNormal];
[self.tncCheckBoxLabel setImage:[UIImage imageNamed:#"Checked Checkbox Filled-50.png"] forState:UIControlStateSelected];
//onClick method
- (IBAction)tncCheckBoxPressed:(id)sender {
//self.tncCheckBoxLabel.selected = !self.tncCheckBoxLabel.selected;
self.tncCheckBoxLabel.selected = !self.tncCheckBoxLabel.selected;
}
The initial view:
The view after clicking on the button:
The initial view is good but after clicking on the button, the image wrapped itself on the text.
I would like to display the checked image to the left which looks like the initial view.

Button doesn't stay pressed when in Collection View

I have an app with this code
_pushButton = [UIButton buttonWithType:UIButtonTypeCustom];
_pushButton.frame = CGRectMake(15, 2, 74, 74);
[_pushButton addTarget:self
action:#selector(buttonPushed:)
forControlEvents:UIControlEventTouchDown];
[_pushButton addTarget:self
action:#selector(buttonReleased:)
forControlEvents:UIControlEventTouchUpInside];
[_pushButton setBackgroundImage:[UIImage imageNamed:#"1.png"] forState:UIControlStateNormal];
[_pushButton setBackgroundImage:[UIImage imageNamed:#"2.png"] forState:UIControlStateSelected];
The behavior is that when the button is pressed the image gets darker and the button stays in that state until the button is released. The buttonPushed is called when the button is pressed and the buttonReleased is called when it is released.
That is what I expected.
I have another application with exactly the same code, that I have copied from the first.
The behavior is different: when the button is pushed, the image gets darker but about a second later the button gets to its original state even if it is still pressed. Only the buttonPushed is called.
This is not what I need.
1) Why the two apps has a different behavior?
2) How can configure the button in the second application to have the same behavior of the first?
UPDATE
In the first app the button is created in a class which subclass
UIView
In the second app the button is created in a class which
subclass UIViewController
UPDATE 2
The button which doesn't stay pressed is in a subview of a UICollectionViewCell. Apparently, buttons have a different behaviour when in a cell of a collection view.

UIButton image goes grey on press

I've gone through all the other questions concerning button color changes. Here's the situation, I have a button that when pressed causes a view to slide out. Before press the button's image is white, once pressed goes grey (this is acceptable), but when pressed again to return to original location, the image is still grey. I want it back to white and have tried using UIControlStateNormal, Disabled, etc with no success.
[self.button setImage:[UIImage imageNamed:#"someImage"] forState:UIControlStateNormal];
this has been changed to all UIControl types. currently it is set as:
[self.menu setImage:[UIImage imageNamed:#"menu"] forState:UIControlStateNormal];
[self.menu setImage:[UIImage imageNamed:#"menu"] forState:UIControlStateSelected | UIControlStateHighlighted];
and still no luck. Any suggestions?
You can disable adjusting colours of button's subviews by setting property
myButton.adjustsImageWhenHighlighted = false
you have to set the same image for both states of the button : -
self.button.setImage(ImageName, for: .normal)
self.button.setImage(ImageName, for: .highlighted)
The code you have shown simply declares which image the button will be depending on different states, however you will need to physically change the state of the button too so these images can be used for each state.
What I mean by this, is if you have the button show a different image for when the button is selected, you will need to change the button state to selected. To return the image to the original unselected image, you will need change the state back to unselected. For example, let's say within your viewDidLoad method you have the following code to declare the images for each of the button states:
//Set for normal state
[self.button setImage:[UIImage imageNamed:#"normalImage.png"] forState:UIControlStateNormal];
//Set for selected state
[self.button setImage:[UIImage imageNamed:#"selctedImage.png"] forState:UIControlStateSelected];
Now within your IBAction method you can toggle between the states
-(IBAction*)yourButtonIsPressed:(id)sender{
if (!self.button.selected){ //This is checking button state
//The code will run in here if the button is in a normal, unselected state. This is where you have you method here to slide in view etc
//Now change the button to a selected state
self.button.selected = YES;
}else{
//The code will now run in here if the button is already in a selected state and this is where you place your method to return the view etc
//Now set the button back to an unselected state
self.button.selected = NO;
}
}
I hope this helps
It was something completely overlooked. I had the view opacity set. so:
self.layer.opacity = .60;
was the issue. Once I commented that line out, the button works like a charm. Thanks for the help Jim.
If you created the button programmatically make sure to set the type and change the image render mode to use original to maintain the image color.
let image = UIImage(named: "someImage").withRenderingMode(.alwaysOrigianl)
let button = UIButton(type: .system)

Changing the Second Button Image by Clicking the First Button IOS7

Hi I'm trying to change the button image by clicking the another button for example i have two buttons like button1 and button2 already this two button has images but now I'm trying to change the second button image by clicking the first button in second button the new image should replace the old image please tell me how to do it.
- (IBAction)bt1:(id)sender {
UIButton *btn = (UIButton*)sender;
[btn setBackgroundImage:[UIImage imageNamed:#"vv.png"] forState:UIControlStateNormal];
}
- (IBAction)bt2:(id)sender {
}
**[btn setBackgroundImage:[UIImage imageNamed:#"vv.png"]** forState:UIControlStateNormal];
This above code is used to change the button image but i want know how to change the second button image by clicking image.
Thanks
You might have the IBAction property of a second button, which you can access in your implementation (.m) file with self (e.g. self.secondButtonPropertyName), now you can write the code like below:
-(IBAction)bt1:(id)sender
{
[self.btn2 setBackgroundImage:[UIImage imageNamed:#"vv.png"] forState:UIControlStateNormal];
}
first you set your both button tag..like btn1 tag =1 and btn2 tag =2
- (IBAction)bt1:(id)sender {
UIButton *btn = (UIButton*)[self.view viewWithTag:2];
[btn setBackgroundImage:[UIImage imageNamed:#"vv.png"] forState:UIControlStateNormal];
}
- (IBAction)bt2:(id)sender {
}
suppose you have two buttons btn1 and btn2
Now after them allocatng memory,
you can use below Button selector,
btn1 selector,
-(IBAction)btn1selector:(id)sender
{
[btn2 setbackgroundimage: [uiimage imagenamed:#"your image"]];
}
you can do same for the other button selector.

Changing Image of Button When the button is selected In Iphone

I have two buttons on my first view,so when I click on one of the button the view changes,so I have two images one for the default state and one for the selected state,
first i tried with xib,goin into the properties and changing the states and then selecting the proper images and when I build and run my code,On cliking the image doesnt change..
So I did this way through code
- (IBAction) handleButton:(id)sender
{
UIButton *button = (UIButton*)sender;
int tag = [button tag];
switch (tag)
{
case BUTTON_1:
if ([m_Button1 isSelected])
{
[m_Button2 setImage:[UIImage imageNamed:#"image.png"] forState:UIControlStateNormal];
[m_Button1 setSelected:NO];
}
else
{
[m_Button1 setImage:[UIImage imageNamed:#"image_pressed.png"] forState:UIControlStateSelected];
[m_Button1 setSelected:YES];
}
[self displaymethod1];
break;
case BUTTON_2:
[self displaymethod2];
break;
default:
break;
}
}
here the image changes when i click on it and i go to diffrent view..when i again come back to my first view,the button is still in selected mode..so How shall i fix this..
Waiting for your reply
I think is a bit simpler through IB.
When you add a regular Round Rect Button in IB you can modify its behavior by going to the Button section in the Attributes Inspector panel.
First select the images you want for it's default state by leaving the State Config in Default. There is an image and a background image properties for this. Once that is set, you can change the State Config to Highlighted and select the image you want to show when the button is highlighted.
NOTE: This is for xcode4.
when your view will appear then you have to initiate all the variable and UI property
in view will appear method. (not necessary in all cases solution is only for your requirement)
There you can set your button default state and image.
-(void)viewWillAppear:(BOOL)animated
{
[m_Button2 setImage:[UIImage imageNamed:#"image.png"] forState:UIControlStateNormal];
[m_Button1 setSelected:NO];
...
}

Resources