UIKit控件篇

Controls

UIControl是所有控件的基类,定义通用方法;控件允许用户与应用交互、修改应用内容、以简单的方式将用户意图传递到应用中。

  1. controlStates:normal/highlighted/disabled/selected/focused/application/reserved(该字段为内容框架预留);可以多个状态组合
  2. controlEvents:touchDown/touchDownRepeat/touchDragInside/touchDragOutside/touchDragEnter/touchDragExit/touchUpInside/TouchUpOutside/编辑相关 等
  3. Content Alignment
  4. 采用AutoLayout,定义约束
  5. 可以自动与voiceOver对应,其属性accessibility设为enable即可
  6. Target-Action机制
//Target-action
[self.mySlider addTarget:self
                  action:@selector(myAction:)
        forControlEvents:UIControlEventValueChanged];

自动布局autoLayout

后续补充
文档

几种controls

buttons
date pickers
Page control
segmented controls
text fields
sliders
steppers
switched

UIKit User Interface

UIButton


文档

button type

按钮种类 样式
UIButtonTypeCustom 没有样式,依靠开发者设置
UIButtonTypeSystem 系统样式,比如在导航栏和工具栏
UIButtonTypeDetailDisclosure 显示详细信息
UIButtonTypeInfoLight 显示简短信息,亮色背景
UIButtonTypeInfoDark 显示简短信息,暗色背景
UIButtonTypeContactAdd 添加联系人
UIKit控件篇_第1张图片
按钮样式在ios9下展示

button five states

  1. default: 初始状态,表示按钮可用,用户还未点击
  2. highlighted
  3. focused
  4. selected
  5. disabled

content

利用UILabel定义title,或者UIImageView定义image

tinkColor

定义button中title和image的颜色,并不是对所有种类的按钮都生效,UIButtonTypeSystem可以生效

titleEdgeInsets、imageEdgeInsets、contentEdgeInsets

imageEdgeInsets(top,left,bottom,right) 和 titleEdgeInsets(top,left,bottom,right)的值是最终结果与按钮初始状态中图片和标题的位置分别在上下左右位移的值
contentEdgeInsets(top,left,bottom,right)的值是相对于初始内容位置的上下左右位移的值;

    UIButton *orignalButton = [UIButton buttonWithType:UIButtonTypeCustom];
    orignalButton.frame = CGRectMake(10, 20, 90, 50);
    [orignalButton setTitle:@"赞一下" forState:UIControlStateNormal];
    [orignalButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [orignalButton setImage:[UIImage imageNamed:@"love"] forState:UIControlStateNormal];
    
    orignalButton.layer.borderColor =  [[UIColor greenColor] CGColor];
    orignalButton.layer.borderWidth = 1;
    [self.view addSubview:orignalButton];

    //图片和文字中间留空白
    CGFloat spacing = 5;
    orignalButton.imageEdgeInsets = UIEdgeInsetsMake(0,  -spacing, 0,spacing );
    orignalButton.titleEdgeInsets = UIEdgeInsetsMake(0, spacing, 0, -spacing);
    
    //图片和文字位置调换
    CGFloat imageWidth = 24;
    CGFloat imageHeight = 24;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
    CGFloat labelWidth = [orignalButton.titleLabel.text sizeWithFont:orignalButton.titleLabel.font].width;
    CGFloat labelHeight = [orignalButton.titleLabel.text sizeWithFont:orignalButton.titleLabel.font].height;
#pragma clang diagnostic pop
    
    orignalButton.imageEdgeInsets = UIEdgeInsetsMake(0, spacing/2+labelWidth, 0, -(spacing/2+labelWidth));
    orignalButton.titleEdgeInsets = UIEdgeInsetsMake(0, -(spacing/2+imageWidth), 0, spacing/2+imageWidth);
    
    //图片在上,文字在下
    CGFloat imageOffsetX = (imageWidth + labelWidth) / 2 - imageWidth / 2;//image中心移动的x距离
    CGFloat imageOffsetY = imageHeight / 2 + spacing / 2;//image中心移动的y距离
    CGFloat labelOffsetX = (imageWidth + labelWidth / 2) - (imageWidth + labelWidth) / 2;//label中心移动的x距离
    CGFloat labelOffsetY = labelHeight / 2 + spacing / 2;//label中心移动的y距离
    orignalButton.imageEdgeInsets = UIEdgeInsetsMake(-imageOffsetY, imageOffsetX, imageOffsetY, -imageOffsetX);
    orignalButton.titleEdgeInsets = UIEdgeInsetsMake(labelOffsetY, -labelOffsetX, -labelOffsetY, labelOffsetX);
    
    //图片在下,文字在上
    orignalButton.imageEdgeInsets = UIEdgeInsetsMake(imageOffsetY, imageOffsetX, -imageOffsetY, -imageOffsetX);
    orignalButton.titleEdgeInsets = UIEdgeInsetsMake(-labelOffsetY, -labelOffsetX, labelOffsetY, labelOffsetX);
UIKit控件篇_第2张图片
结果

UIDatePicker


日期选择器,可以选择日期,时间或者两者兼具。
UIDatePicker文档

UIDatePickerMode

种类 描述
UIDatePickerModeTime 小时:分钟或者带上AM/PM,如 [ 6 53 PM ]
UIDatePickerModeDate 年月日, 如[ November 15 2007 ]
UIDatePickerModeDateAndTime 年月日星期小时分钟,如 [ Wed Nov 15 6 53 PM ]
UIDatePickerModeCountDownTimer 显示小时分钟,倒计时使用,如 [ 1 53 ]

content

  1. maximumDate、minimumDate 都是NSDate类型,限定范围
  2. minuteInterval表示分钟间隔
  3. countDownDuration,当选择器是UIDatePickerModeCountDownTimer模式时才有效

behavior

使用target-action

[self.myDatePicker addTarget:self
                      action:@selector(myAction:)
            forControlEvents:UIControlEventValueChanged];

实现

-(void)initDatepicker
{
    UIDatePicker *datePicker = [[UIDatePicker alloc]initWithFrame:CGRectMake(30, 300, 0, 0)];
    [datePicker addTarget:self action:@selector(dateChange:) forControlEvents:UIControlEventValueChanged];//添加触发事件
    [self.view addSubview:datePicker];
    //设置地区,[NSLocale availableLocaleIdentifiers]可以取出所有
    [datePicker setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN" ]];
    //设置datePicker的日历,默认当天
    [datePicker setCalendar:[NSCalendar currentCalendar]];
    //时间模式
    [datePicker setDatePickerMode:UIDatePickerModeDateAndTime];
    //时区
    [datePicker setTimeZone:[NSTimeZone localTimeZone]];
}

-(void)dateChange:(UIDatePicker *)datePicker
{
    NSLog(@"%@", datePicker.date);
}
UIKit控件篇_第3张图片
日期选择器

UIPageControl

其提供一行点来指示当前显示的是多页面视图的哪一页,当用户界面需要按页面进行显示时,UIPageControl控件将要显示的用户界面内容分页进行显示会使编程工作变得快捷。
之前我发布的UIPageViewController学习就结合UIPageControl进行分页展示
UIPageControl文档

content

  1. numberOfPages、currentPage、hidesForSinglePage(只有一页时是否隐藏)
  2. pageIndicatorTintColor页面指示小圆点的颜色、currentPageIndicatorTintColor 当前页指示小圆点的颜色
  3. defersCurrentPageDisplay这个属性是用来控制页面变更延时用的,默认值是NO。当它被设置为NO的时候,显示当前page的圆点会直接在界面上变更,如果设置为YES,想要当前page点变更的话,必须手动调用-(void)updateCurrentPageDisplay方法。
  4. updateCurrentPageDisplay
  5. sizeForNumberOfPages 根据页面数指定边界大小

behavior

UIPageControl需要delegate来处理用户交互,其不能同步页面和指示圆点,

  1. 可以采用 UIScrollViewDelegate来处理
  2. UIPageControl在用户点击圆点的时候,会发送UIControlEventValueChanged事件,可以用target-action方法来处理

结合scrollView实现

- (void)setUpScrollView
{
    _scrollView = [[UIScrollView alloc]initWithFrame:self.view.frame];
    [self.view addSubview:_scrollView];
    
    CGFloat width = _scrollView.frame.size.width;
    CGFloat height = _scrollView.frame.size.height;

    _images = @[@"001.jpg",@"002.jpg",@"004.jpg"];
    
    for (NSInteger i = 0; i < _images.count; i++)
    {
        UIImage *image = [UIImage imageNamed:_images[i]];
        UIImageView *imageView = [[UIImageView alloc]initWithImage:image];
        CGFloat proportion = width/(image.size.width);
        CGFloat imageHeight = image.size.height*proportion;
        [imageView setFrame:CGRectMake(i*width, (height-imageHeight)/2, width, imageHeight)];
        [_scrollView addSubview:imageView];
    }
    
    _scrollView.contentSize = CGSizeMake(width*_images.count, height);
    _scrollView.pagingEnabled = YES;
    _scrollView.showsHorizontalScrollIndicator = NO;
    _scrollView.showsVerticalScrollIndicator = NO;
    _scrollView.bounces = NO;
    _scrollView.delegate = self;
    
    _pageControl = [[UIPageControl alloc]init];
    _pageControl.backgroundColor = [UIColor clearColor];
    _pageControl.pageIndicatorTintColor = [UIColor grayColor];
    _pageControl.currentPageIndicatorTintColor = [UIColor blackColor];
    _pageControl.currentPage = 0;
    _pageControl.bounds = CGRectMake(0, 0, 200, 100);
    _pageControl.center = CGPointMake(self.view.bounds.size.width/2, self.view.bounds.size.height-30);
    _pageControl.numberOfPages = _images.count;
    
    [_pageControl addTarget:self action:@selector(changePage:) forControlEvents:UIControlEventValueChanged];
    
    [self.view addSubview: _pageControl];
}

-(void)changePage:(id)sender
{
    if ([sender isKindOfClass:[UIPageControl class]])
    {
        UIPageControl *pageControl = (UIPageControl *)sender;
        NSInteger index = pageControl.currentPage;
        _scrollView.contentOffset = CGPointMake(index * self.view.frame.size.width, 0);
    }
    
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    NSInteger index = scrollView.contentOffset.x/self.view.frame.size.width;
    _pageControl.currentPage = index;
}
UIKit控件篇_第4张图片
演示结果

UISegmentedControl

文档
其可以有多个segment组成,每个segment都可以被点击,类似于集成了多个button,点击不同的segment可以切换不同的view;与TabBar和ToolBar很相似;UISegmentedControl可以作为导航栏头部titleView

初始化

_segmentItems = @[@"个人中心",@"图片库"];
//初始化,可以是文字or图片,系统会自动控制每个单元的大小
_segmentedControl = [[UISegmentedControl alloc]initWithItems:_segmentItems];

内容设置

//设置初始选择的单元index
_segmentedControl.selectedSegmentIndex = 0;
//可以动态调整单元中内容、增加减少单元个数
[_segmentedControl setTitle:@"动态" forSegmentAtIndex:0];[_segmentedControl setImage:[UIImage imageNamed:@"001.jpg"] forSegmentAtIndex:1];
//获取单元内容
NSString *title = [_segmentedControl titleForSegmentAtIndex:0];
UIImage *image = [_segmentedControl imageForSegmentAtIndex:1];

动态调整内容

//insert before segment number.
[_segmentedControl insertSegmentWithTitle:@"个人中心" atIndex:1 animated:YES];
[_segmentedControl insertSegmentWithImage:[UIImage imageNamed:@"002.jpg"] atIndex:1 animated:YES];
[_segmentedControl removeSegmentAtIndex:1 animated:YES]; //删除位置1的单元格
[_segmentedControl removeAllSegments];
//读取segments的数量
NSInteger numOfSegments = _segmentedControl.numberOfSegments;

设置segments的展示大小

//默认值为NO,即点击后保持选中状态,如果设置为YES则,只是短暂的显示选中状态
_segmentedControl.momentary = YES;
//调整单元展示的大小
[_segmentedControl setContentOffset:CGSizeMake(5, 5) forSegmentAtIndex:1];
[_segmentedControl setWidth:70 forSegmentAtIndex:2];
//单元是否能选中,默认YES
[_segmentedControl setEnabled:NO forSegmentAtIndex:2];
//是否根据内容大小自动调整,默认NO
_segmentedControl.apportionsSegmentWidthsByContent = YES;
//获取单元的展示大小
CGSize contentOffset = [_segmentedControl contentOffsetForSegmentAtIndex:0];
CGFloat width = [_segmentedControl widthForSegmentAtIndex:2];

外观自定义

//边框,分隔线,文字,点击后的颜色展示默认是蓝色,可以设置tintColor进行修改
_segmentedControl.tintColor = [UIColor grayColor];
//设置背景图片
[_segmentedControl setBackgroundImage:[UIImage imageNamed:@"002.jpg"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
//设置分割线图片样式,
[_segmentedControl setDividerImage:[UIImage imageNamed:@"001.jpg"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
//设置单元格中标题样式
[_segmentedControl setTitleTextAttributes:nil forState:UIControlStateNormal];

事件行为

_segmentedControl addTarget:self action:@selector(chooseSegment:) forControlEvents:UIControlEventValueChanged];

- (void)chooseSegment:(id)sender
{
    if([sender isKindOfClass:[UISegmentedControl class]])
    {
        UISegmentedControl *segmentControl = (UISegmentedControl *)sender;
        if (segmentControl.selectedSegmentIndex == 0){
            NSLog(@"%@",[segmentControl titleForSegmentAtIndex:0]);
        }else if(segmentControl.selectedSegmentIndex == 1){
            NSLog(@"%@",[segmentControl titleForSegmentAtIndex:1]);
        }else if(segmentControl.selectedSegmentIndex == 2){
            NSLog(@"%@",[segmentControl titleForSegmentAtIndex:2]);
        }
    }
}
UIKit控件篇_第5张图片
结果

UITextField

文档
其支持用户在app中输入一行文字

初始化

UITextField *textField = [[UITextField alloc]init];
textField.frame = CGRectMake(30, 30, (self.view.frame.size.width - 30*2),30 );

样式设置

//设置背景颜色
textField.backgroundColor = [UIColor lightGrayColor];
//设置背景图片,背景色设置无效;如果background为nil,disabledBackground无效 
textField.background = [UIImage imageNamed:@"001.jpg"];
textField.disabledBackground = [UIImage imageNamed:@"002.jpg"];
//边框样式,如:none、line、bezel、roundRect
textField.borderStyle = UITextBorderStyleLine;

内容设置

//设置文本框初始内容
textField.text = @"hello";
//设置文本框字体颜色
textField.textColor = [UIColor blueColor];
//设置文本框字体大小
textField.font = [UIFont systemFontOfSize:20];
//默认为NO,设置为YES表示文本会自动缩小来适应
textField.adjustsFontSizeToFitWidth = YES;
//自动缩小显示的最小字体大小
textField.minimumFontSize = 15;

//内容的水平,垂直对齐方式
textField.textAlignment = NSTextAlignmentLeft;
textField.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

//输入框中是否有个叉号,在什么时候显示,用于一次性删除输入框中的内容
textField.clearButtonMode = UITextFieldViewModeWhileEditing;
//安全输入,输入的字符变成黑点
passwordTextField.secureTextEntry = YES;
//是否对输入的内容纠错
textField.autocorrectionType = UITextAutocorrectionTypeNo;
//再次进入编辑模式,就清除之前的
textField.clearsOnBeginEditing = YES;

//左右侧可以增加view,不过通常不这样做,会设置一个view,上面再放UIImageview 和 UITextField
textField.leftView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"love.jpg"]];//会是包在textfield里面
textField.leftViewMode = UITextFieldViewModeUnlessEditing;

键盘相关设置

textField.keyboardType = UIKeyboardTypeNumberPad; //数字键盘
typedef enum {
    UIKeyboardTypeDefault,      //默认键盘,支持所有字符
    UIKeyboardTypeASCIICapable, //支持ASCII的默认键盘
    UIKeyboardTypeNumbersAndPunctuation, //标准电话键盘,支持+*#字符
    UIKeyboardTypeURL,            //URL键盘,支持.com按钮 只支持URL字符
    UIKeyboardTypeNumberPad,      //数字键盘
    UIKeyboardTypePhonePad,     //电话键盘
    UIKeyboardTypeNamePhonePad,  //电话键盘,也支持输入人名
    UIKeyboardTypeEmailAddress,  //用于输入电子 邮件地址的键盘
    UIKeyboardTypeDecimalPad,    //数字键盘 有数字和小数点
    UIKeyboardTypeTwitter,       //优化的键盘,方便输入@、#字符
    UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable,
} UIKeyboardType;

//首字母是否自动调节大写
textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
typedef enum {
    UITextAutocapitalizationTypeNone, //不自动大写
    UITextAutocapitalizationTypeWords, //单词首字母大写
    UITextAutocapitalizationTypeSentences, //句子的首字母大写
    UITextAutocapitalizationTypeAllCharacters, //所有字母都大写
} UITextAutocapitalizationType;

//return键的样式
textField.returnKeyType = UIReturnKeyDone;
typedef enum {
    UIReturnKeyDefault,   //默认 灰色按钮,标有Return
    UIReturnKeyGo,       //标有Go的蓝色按钮
    UIReturnKeyGoogle,  //标有Google的蓝色按钮,用语搜索
    UIReturnKeyJoin,       //标有Join的蓝色按钮
    UIReturnKeyNext,     //标有Next的蓝色按钮
    UIReturnKeyRoute,   //标有Route的蓝色按钮
    UIReturnKeySearch,  //标有Search的蓝色按钮
    UIReturnKeySend,    //标有Send的蓝色按钮
    UIReturnKeyYahoo,  //标有Yahoo的蓝色按钮
    UIReturnKeyDone,    //标有Done的蓝色按钮
    UIReturnKeyEmergencyCall, //紧急呼叫按钮
    UIReturnKeyContinue NS_ENUM_AVAILABLE_IOS(9_0),
} UIReturnKeyType;

事件行为

  1. 实现代理UITextFieldDelegate中的方法,比如手机号码11位,可以通过委托的shouldChangeCharactersInRange方法控制用户能且只能输入11位数字。另外,通常会要求输入框内容输入后才让按钮可以点击;
  2. textFields发送的事件类型定义target-action
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
    //返回一个BOOL值,指定是否循序文本字段开始编辑
    return YES;
}

- (void)textFieldDidBeginEditing:(UITextField *)textField{
   // 当输入框获得焦点时,执行该方法 (光标出现时)。
   //开始编辑时触发,文本字段将成为first responder
}

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
     //返回BOOL值,指定是否允许文本字段结束编辑,当编辑结束,文本字段会让出first responder
  //要想在用户结束编辑时阻止文本字段消失,可以返回NO
  //这对一些文本字段必须始终保持活跃状态的程序很有用,比如即时消息

    return NO;
}

- (void)textFieldDidEndEditing:(UITextField *)textField{
    //结束编辑,即使shouldEndEditing返回NO,但是是强制或者endEditing为YES,也会被调用
}

- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    //当用户使用自动更正功能,把输入的文字修改为推荐的文字时,就会调用这个方法。
    //这对于想要加入撤销选项的应用程序特别有用
    //可以跟踪字段内所做的最后一次修改,也可以对所有编辑做日志记录,用作审计用途。
    //要防止文字被改变可以返回NO
    //这个方法的参数中有一个NSRange对象,指明了被改变文字的位置,建议修改的文本也在其中

    return YES;
}

- (BOOL)textFieldShouldClear:(UITextField *)textField{
    //返回一个BOOL值指明是否允许根据用户请求清除内容
    //可以设置在特定条件下才允许清除内容
    
    return YES;
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
   // 当点击键盘的返回键(右下角)时,执行该方法。
   // 一般用来隐藏键盘
    [text resignFirstResponder];    
   //主要是[receiver resignFirstResponder]在哪调用就能把receiver对应的键盘往下收
    return YES;
}

通知

//文本字段进入/退出编辑模式时,或者内容变化时
UITextFieldTextDidBeginEditingNotification
UITextFieldTextDidChangeNotification
UITextFieldTextDidEndEditingNotification

//文本字段要使用键盘输入文字,所以下面这些事件发生时,也会发送动作通知
UIKeyboardWillShowNotification  //键盘显示之前发送
UIKeyboardDidShowNotification   //键盘显示之后发送
UIKeyboardWillHideNotification  //键盘隐藏之前发送
UIKeyboardDidHideNotification   //键盘隐藏之后发送

demo:手机号正确输入后按钮可用

稍后补充

UISlider

文档
修改可调节的值,比如说音量大小,屏幕亮度,字体大小等

初始化

UISlider *slider = [[UISlider alloc]init];
slider.frame = CGRectMake( 30, 60, (self.view.frame.size.width - 30*2), 30);

内容设置

//最小值默认为0.最大值默认为1
slider.minimumValue = 10;
slider.maximumValue = 100;

//默认为YES,滑块值是不是连续变化的,这个属性设置为YES则在滑动时,其value就会随时变化,设置为NO,则当滑动结束时,value才会改变。
slider.continuous = NO;
    
//手动设置滑块的值
[slider setValue:30 animated:YES];

样式设置

//设置最小值和最大值的图片
slider.minimumValueImage = [UIImage imageNamed:@"001.jpg"];
slider.maximumValueImage = [UIImage imageNamed:@"002.jpg"];

//设置滑块的颜色
[slider setThumbTintColor:[UIColor grayColor]];
//设置滑块的图片
[slider setThumbImage:[UIImage imageNamed:@"love.jpg"] forState:UIControlStateNormal];
    
//设置滑块滑动后,路径颜色的变化
[slider setMinimumTrackTintColor:[UIColor blueColor]];
[slider setMaximumTrackTintColor:[UIColor grayColor]];

事件机制

当用户滑动时,slider可以发送UIControlEventValueChanged事件

[slider addTarget:self
           action:@selector(sliderChange:)
 forControlEvents:UIControlEventValueChanged];

demo

UIKit控件篇_第6张图片
slider

UIStepper

文档
可以递进式或递减式增加、减少步数

初始化

UIStepper *stepper = [[UIStepper alloc]init];
//宽高不起作用
stepper.frame = CGRectMake(30, 60, (self.view.frame.size.width - 30*2), 70);

内容设置

//最小值默认是0,最大值默认是100
stepper.minimumValue = 10;
stepper.maximumValue = 50;
//设置每次操作变化的值
stepper.stepValue = 5;

//默认为YES,为YES则在用户交互过程时,其value就会随时变化,设置为NO,则当交互结束时,value才会改变。
stepper.continuous = NO;
    
//默认为YES,用户按压时是否自动增长
stepper.autorepeat = YES;
    
//默认为NO,是否要循环计数
stepper.wraps = YES;

样式设置

//设置背景图片
[stepper setBackgroundImage:[UIImage imageNamed:@"003.jpg"] forState:UIControlStateNormal];
//设置颜色
stepper.tintColor = [UIColor redColor];

//设置中分线图片,根据左右两边不同的状态可以设置不同的图片
[stepper setDividerImage:[UIImage imageNamed:@"love.jpg"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateHighlighted];
//设置图片替代加号
[stepper setDecrementImage:[UIImage imageNamed:@"001.jpg"] forState:UIControlStateNormal];
//设置图片替代减号
[stepper setIncrementImage:[UIImage imageNamed:@"002.jpg"] forState:UIControlStateNormal];

事件机制

当用户点击加号或者减号时,stepper可以发送UIControlEventValueChanged事件

[stepper addTarget:self
           action:@selector(stepperChange:)
 forControlEvents:UIControlEventValueChanged];

demo

stepper

UISwitch

文档
开关按钮,用户可以选择打开或者关闭

初始化

UISwitch *switchBtn = [[UISwitch alloc]init];
switchBtn.frame = CGRectMake(30, 60, (self.view.frame.size.width - 30*2), 70);

内容设置

//设置开关是打开or关闭
switchBtn.on = YES;
[switchBtn setOn:YES animated:YES];

样式设置

//设置按钮的颜色
[switchBtn setThumbTintColor:[UIColor grayColor]];
//设置开关在关闭时,边框的颜色
[switchBtn setTintColor:[UIColor grayColor]];
//设置开关在打开时的颜色
[switchBtn setOnTintColor:[UIColor redColor]];

//打开和关闭的背景图片,图片尺寸有限制,否则不展示
[switchBtn setOnImage:[UIImage imageNamed:@"001.jpg"]];
[switchBtn setOffImage:[UIImage imageNamed:@"002.jpg"]];

事件机制

当用户打开or关闭时,switchBtn可以发送UIControlEventValueChanged事件

[switchBtn addTarget:self
           action:@selector(switchChange:)
 forControlEvents:UIControlEventValueChanged];

demo

UISwitch

你可能感兴趣的:(UIKit控件篇)