UIColor noColor, but not clearColor - ios

How can I get the UIColor for no color? Y'know, the color represented as a white square with a red diagonal line through it.
TLDR
I'm trying to set the tint color of a UIButton in interface builder, but it's not playing nice, so I'm trying to do it programatically. If I set the button's tint color to [UIColor clearColor], the button disappears. The button only has an image, no text.

This property not available for all types of UIButton
You need to Use another buttonType.you can find this link useful.
the documentation also does not provide information that which specific button types support this property.
so..in general use custom button type

Create your button as custom...
[UIButton buttonWithType:UIButtonTypeCustom]
This will remove your red corner problem since i think your button is created as default (rounded rect) type.
You can set this in interface builder too (not necessarily create it programmatically).

Related

How to make the underlying views gray

I have a UILabel and a UIButton on the UIView (as ORIGIN in screenshot), and then are there any technology to make they gray temporarily? (as EXPECTED in screenshot)
I've try to create a UIVIew (Background color #6666 and alpha 0.75) front of them and get ACTUAL.
https://i.stack.imgur.com/y5xhH.jpg "screenshot"
By the way, the ACTUAL screen shot is captured when presenting a UIAlertController.
Don't set alpha 0.75 instead set 1.0 and you can set title colour for button either in storyboard or xib if you are using storyboard or nib file. You can also set title colour programatically.
[button setTitleColor:[UIColor lightTextColor] forState:UIControlStateNormal];
here button is your button reference and you can set any colour you want.
Edited:
If you have clicked actual image with alert view then you can also set with 0.75 alpha what is best suited you. What only diff i can see is the colour of button text. Which you can set from above mentions methods.

UIButton doesn't get filled entirely with color when in selected state

calling button.selected = true does not fills the entire button frame with tint color.
Expected result
The button should be filled entirely with the tint color in selected state.
Actual result
The tint color only filled the the area around the text in button.
How to fill the entire button frame(area) with the color when the button is in selected(or any other) state?
Use the backgroundColor instead of tintColor.
You can set it in the Storyboard button's properties. Under "view" section.
As David already said, try changing the background color instead.
If you want to change it through storyboard, then have a look at the attached screenshot.

I want transparent UIView but not the elements which I added over it

First of all sorry for the Title. I didn't knew how to exactly convey my problem. So my problem is that I have set black color in the background of a UIView and I've made it transparent. But the UI elements which I am adding over it (e.g Buttons, Labels etc) is also getting faded along with the UIView. For example if I set the alpha of UIView to be 0.5 then it automatically applies to all the controls I've added on that UIView which I don't want. So please tell me how to save elements from getting faded.
If you just have to make view transparent not the subviews, then go with
self.view.backgroundColor=[UIColor clearColor];
What it does is, it will make background view transparent, instead setting alpha property will fade subviews also.
instead of writing in code. we can set it in Interface Builder also. By selecting the background color in the Attributes Inspector in the IB you have to click on background color property and select other and there you can set the alpha or any color you want directly which reduces the code.
#Rahul
You can use something like:
view.backgroundColor=[[UIColor alloc] initWithRed:0 green:0 blue:0 alpha:0.5];
This will keep the transparency solely to the background but not the subviews.
What you need to do is, don't change the alpha of the UIView, instead, set backgroundColor with the desired transparency, e.g. if you want to have half transparent black, do view.backgroundColor = [UIColor colorWithWhite:0. alpha:.5];
Good Luck!

UIButton image opacity required

I created a button on interface builder and set set its "image" to a png file and did not set any background image to it.
I want the button background to be transparent so I set its alpha to 0.6 in IB. The problem is I DO NOT WANT the image to be transparent too ( only the surrounding background ) but the image apparently inherits the button alpha and I can see throughout it.
Is there a way to completely avoid the button image to be transparent ?
Thanks
Update 1:
Using Xcode 5.02
I'm testing it on an iOS6 device, but can also test with iOS7 in the simulator.
Update 2:
Apparently the solution is to rescale the images to match the button rectangle.
The problem is that the button has a title that is positioned below the image to describe the functionality. In this case how could I put the text "floating" above the image ?
I'm assuming you're not programming in iOS 7?
Set the backgroundColor property of your UIButton to [UIColor clearColor]`;
If you've connected an IBOutlet to your UIButton then you can do something like this
[myButton setBackgroundColor:[UIColor clearColor]];
This will only work if you have a well defined transparent image. If you have some areas in your image that is not transparent then the above method will not work and you will simply need to edit your image again to make sure all the areas are actually transparent.
If you're in iOS 7, I believe the UIButton is already transparent and its up to your image to do the rest.
UPDATE 1
OP has requested for the title to remain above the image of the UIButton. Here is the solution for that,
What you need to do is set the backgroundImage property of the UIButton instead of simply setting the image of the button which will push the title down as you have found out.
Again I'm assuming you have an IBOutlet connected to your button; simply do the following:
Make sure you delete any image setting code in interface builder so that the properties are blank.
Then implement the code below
//This is the bit that does the magic - setting the background property
[myButton setBackgroundImage:[UIImage imageNamed:#"button.png"] forState:UIControlStateNormal];
//Then you can set the title as you require, the title will be centered floating above your background image.
[myButton setTitle:#"Localised String" forState:UIControlStateNormal];
[myButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
And you will get something like this:
If you are using a proper PNG file with transparency in the file, this works automatically without changing the alpha value. If the PNG does not have the transparent area defined properly you will not be able to achieve this by a property (only by complicated drawing methods, which is probably not want you want).
You have to use a PNG image with transparent background. To remove background colour of a image, Let me suggest you a free tool "GIMP" I've been using it for a while.
As already been said - you can use semi-transparent PNG for image.
As for putting up title over the image - you would need to write some code.
You won't be able to do this in Interface Builder.
So you can easy create button
#interface MyButton : UIButton
#end
#implementation MyButton
- (void)layoutSubviews {
[super layoutSubviews];
[self bringSubviewToFront:self.titleLabel];
}
#end
As for image, covering the whole area - it's better, when possible, to use background image rather image.
For partial background color transparency - you always can set semi-transparent background color for it in IB or in code:
[button setBackgroundColor:[UIColor colorWithWhite:0 alpha:0.5]];

No Round Rect Button in Xcode 5?

Is drag and drop of round rect button no longer available in Xcode 5? I can't seem to find it in the Interface Builder. I was guessing that this is one of the changes in iOS 7, but I just wanted to make sure.
Can also make the rounded rect within the storyboard.
The Round Rect button from Xcode 4 and previous versions appears to have been replaced with the System Default button, which also happens to be clear. I.e. by default there is no white background with rounded corners, only the text is visible.
To make the button white (or any other colour), select the attributes inspector and scroll down to the View section:
Select Background and change it to White:
If you want rounded corners you can do so with a little bit of code.
Just ctrl-drag from the button to your .h file, call it something like roundedButton and add this in your viewDidLoad:
CALayer *btnLayer = [roundedButton layer];
[btnLayer setMasksToBounds:YES];
[btnLayer setCornerRadius:5.0f];
This was too long for a comment in #Robert's answer, but I just wanted to add regarding the statement: "The Round Rect button from Xcode 4...appears to have been replaced...".
Confirming that it definitely has been replaced:
The rounded rectangle button is deprecated in iOS 7. Instead, use a
system button—that is, a UIButton object of type UIButtonTypeSystem.
iOS 7 system buttons don’t include a bezel or a background appearance.
A system button can contain a graphical symbol or a text title, and it
can specify a tint color or receive its parent’s color.
...
If you need to display a button that includes a bezel, use a button of
type UIButtonTypeCustom and supply a custom background image.
Apple iOS 7 Transition Guide, p. 45, "Rounded Rectangle Button"
So, Apple's recommendation is to use a background image.
Actually in ios 7 the total UI has been changed for basic controls.
If still you want to have a rounded rect button, you have to go for the coregraphical property of UIView subclasses i.e; layer property.
buttonObj.layer.cornerRadius = 5.0f;//any float value
to show the effect you have to give some background color to buttonObj
if you want to set the border width
buttonObj.layer.borderWidth = 2.0f;//any float value
you can also give the color for border
buttonObj.layer.borderColor = [[UIColor greenColor]CGColor];
Note: Here we have to use CGColor for the layers because layers are the core graphical properties of UIViews

Resources