Buttons in Xamarin.iOS
In iOS, the UIButton
class represents a button control.
A button's properties can be modified either programmatically or with Xcode's Interface Builder.
Creating a button programmatically
A UIButton
can be created with only a few lines of code.
Instantiate a button and specify its type:
UIButton myButton = new UIButton(UIButtonType.System);
The button's type is specified by a
UIButtonType
property:UIButtonType.System
- A general-purpose buttonUIButtonType.DetailDisclosure
- Indicates the availability of detailed information, usually about a specific item in a tableUIButtonType.InfoDark
- Indicates the availability of configuration information; dark-coloredUIButtonType.InfoLight
- Indicates the availability of configuration information; light-coloredUIButtonType..AddContact
- Indicates that a contact can be addedUIButtonType.Custom
- Customizable button
For more information about the different button types, take a look at:
- The Custom button types section of this document
- The Button types recipe
- Apple's iOS Human Interface Guidelines.
Define the button's size and position:
myButton.Frame = new CGRect(25, 25, 300, 150);
Set the button's text. Use the
SetTitle
method, which requires the text and aUIControlState
value for button state:myButton.SetTitle("Hello, World!", UIControlState.Normal);
The button's state types are listed below:
UIControlState.Normal
UIControlState.Highlighted
UIControlState.Disabled
UIControlState.Selected
UIControlState.Focused
UIControlState.Application
UIControlState.Reserved
For more information about styling a button and setting its text, refer to:
- The Styling a button section of this document
- The Set button text recipe.
Handling a button tap
To respond to a button tap, provide a handler for the button's
TouchUpInside
event:
myButton.TouchUpInside += (sender, e) => {
DoSomething();
};
Note
TouchUpInside
is not the only available button event. UIButton
is a
child class of UIControl
, which defines
many different events.
Styling a button
UIButton
controls can exist in a number of different states, each
specified by a UIControlState
value – Normal
, Disabled
,
Focused
, Highlighted
, etc. Each state can be given a unique style,
specified programmatically or with the iOS Designer.
Note
For a complete list of all UIControlState
values, take a look at the
UIKit.UIControlState enumeration
documentation.
For example, to set the title color and shadow color for
UIControlState.Normal
:
myButton.SetTitleColor(UIColor.White, UIControlState.Normal);
myButton.SetTitleShadowColor(UIColor.Black, UIControlState.Normal);
The following code sets the button title to an attributed (stylized) string
for UIControlState.Normal
and UIControlState.Highlighted
:
var normalAttributedTitle = new NSAttributedString(buttonTitle, foregroundColor: UIColor.Blue, strikethroughStyle: NSUnderlineStyle.Single);
myButton.SetAttributedTitle(normalAttributedTitle, UIControlState.Normal);
var highlightedAttributedTitle = new NSAttributedString(buttonTitle, foregroundColor: UIColor.Green, strikethroughStyle: NSUnderlineStyle.Thick);
myButton.SetAttributedTitle(highlightedAttributedTitle, UIControlState.Highlighted);
Custom button types
Buttons with a UIButtonType
of Custom
have no default styles. However,
it's possible to configure the button's appearance by setting an image for
its different states:
myButton.SetImage (UIImage.FromBundle ("Buttons/MagicWand.png"), UIControlState.Normal);
myButton.SetImage (UIImage.FromBundle ("Buttons/MagicWand_Highlight.png"), UIControlState.Highlighted);
myButton.SetImage (UIImage.FromBundle ("Buttons/MagicWand_On.png"), UIControlState.Selected);
Depending on whether the user is touching the button or not, it will
render as one of the following images (UIControlState.Normal
,
UIControlState.Highlighted
and UIControlState.Selected
states,
respectively):
For more information about working with custom buttons, refer to the Use an image for a button recipe.