详细阐述UIButton, UILabel, UITextField的用法

各位童鞋们, UIButton是iOS中常用的控件,下面来详细介绍它的使用方法和以及开发中需要注意的问题.

UIButton (按钮)

  • UIButton的创建, 系统提供了构造器方法, 代码如下:
    UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem
  • 其中buttonWithType(button的类型):后是枚举类型, 总共有六种类型, 如下所示:
    typedef enum {
    UIButtonTypeCustom = 0, 自定义风格
    UIButtonTypeSystem, 系统的风格
    UIButtonTypeRoundedRect, 圆角矩形
    UIButtonTypeDetailDisclosure, 蓝色小箭头按钮,主要做详细说明用
    UIButtonTypeInfoLight, 亮色感叹号
    UIButtonTypeInfoDark, 暗色感叹号
    UIButtonTypeContactAdd, 十字加号按钮
    } UIButtonType;
  1. 设置button的frame(必须设置, 否则无法显示按钮)
    button.frame = CGRectMake(20, 20, 100, 50);
    [button setFrame:CGRectMake(20,20,100,50)]
    // 上面两种等效, 用其中一种即可
  2. 设置button的背景颜色
    button.backgroundColor = [UIColor cyanColor];
    [button setBackgroundColor:[UIColor blueColor]];
    // 上面两种等效, 用其中一种即可
  3. 在button上添加文字和图片(同时添加文字和图片, 文字在右, 图片在左, 如果你想改变这种排序, 就需要自定义UIButton)



    [button setTitle:@"点击" forState:UIControlStateNormal]; // 给button上添加文字
    [button setImage:[UIImage imageNamed:@"Unknown-1.png"] forState:UIControlStateNormal]; // 给button上添加图片
    [button setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; // 设置button上文字的颜色
    [button setTintColor:[UIColor cyanColor]]; // 设置button上元素的颜色
    button.titleLabel.font = [UIFont systemFontOfSize:17]; // 设置button上的字体大小(注意:只能在 UIButtonTypeSystem或者UIButtonTypeCustom下才能设置字体的大小)

  4. forState: 这个参数的作用是定义按钮的文字或图片在何种状态下才会显现
    //以下是几种状态
    enum {
    UIControlStateNormal = 0, 常规状态显现
    UIControlStateHighlighted = 1 << 0, 高亮状态显现
    UIControlStateDisabled = 1 << 1, 禁用的状态才会显现
    UIControlStateSelected = 1 << 2, 选中状态
    UIControlStateApplication = 0x00FF0000, 当应用程序标志时
    UIControlStateReserved = 0xFF000000 为内部框架预留,可以不去管它
    };
  5. UIButton的点击效果
    // 默认情况下,当按钮高亮的情况下,图像的颜色会被画深一点,如果这下面的这个属性设置为NO,就没有这个效果
    button1.adjustsImageWhenHighlighted = NO;
    // 跟上面的情况一样,默认情况下,当按钮禁用的时候,图像会被画得深一点,设置NO可以取消设置
    button1.adjustsImageWhenDisabled = NO;
    // 下面的这个属性设置为YES的状态下,按钮按下会发光
    button1.showsTouchWhenHighlighted = YES;
  6. 设置button上文字的阴影及阴影颜色,向右向下为正,向左向上为负
    button.titleLabel.shadowOffset = CGSizeMake(2, 2);
    [button setTitleShadowColor:[UIColor redColor] forState:UIControlStateNormal];
  7. 给button上的文字或者图片添加约束 UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right) 分别是相对于button的边缘 距上, 距左, 距下, 距右 的距离
    [button setTitleEdgeInsets:UIEdgeInsetsMake(5, 5, 5, 5)]; // 约束文字
    [button setImageEdgeInsets:UIEdgeInsetsMake(5, 5, 5, 5)]; // 约束图片
  8. 添加或删除点击事件(点击事件必须实现, 否者会运行崩溃)
    // 给button添加点击事件
    [button addTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];
    // 给button移除点击事件
    [button removeTarget:self action:@selector(clickButton:) forControlEvents:UIControlEventTouchUpInside];
  • UIButton的点击事件
    UIControlEventTouchDown // 单点触摸按下事件:用户点触屏幕,或者又有新手指落下的时候。
    UIControlEventTouchDownRepeat // 多点触摸按下事件,点触计数大于1:用户按下第二、三、或第四根手指的时候。
    UIControlEventTouchDragInside // 当一次触摸在控件窗口内拖动时。
    UIControlEventTouchDragOutside // 当一次触摸在控件窗口之外拖动时。
    UIControlEventTouchDragEnter // 当一次触摸从控件窗口之外拖动到内部时。
    UIControlEventTouchDragExit // 当一次触摸从控件窗口内部拖动到外部时。
    UIControlEventTouchUpInside // 所有在控件之内触摸抬起事件。
    UIControlEventTouchUpOutside // 所有在控件之外触摸抬起事件(点触必须开始与控件内部才会发送通知)。
    UIControlEventTouchCancel // 所有触摸取消事件,即一次触摸因为放上了太多手指而被取消,或者被上锁或者电话呼叫打断。
    UIControlEventTouchChanged // 当控件的值发生改变时,发送通知。用于滑块、分段控件、以及其他取值的控件。你可以配置滑块控件何时发送通知,在滑块被放下时发送,或者在被拖动时发送。
    UIControlEventEditingDidBegin // 当文本控件中开始编辑时发送通知。
    UIControlEventEditingChanged // 当文本控件中的文本被改变时发送通知。
    UIControlEventEditingDidEnd // 当文本控件中编辑结束时发送通知。
    UIControlEventEditingDidOnExit // 当文本控件内通过按下回车键(或等价行为)结束编辑时,发送通知。
    UIControlEventAlltouchEvents // 通知所有触摸事件。
    UIControlEventAllEditingEvents // 通知所有关于文本编辑的事件。
    UIControlEventAllEvents // 通知所有事件。
  • 设置UIButton的圆角, 边框颜色, 边框线宽
    // 设置button的透明度
    button.alpha = 0.50f;
    // 设置button的圆角大小
    button.layer.cornerRadius = 5;
    // 设置边框线宽
    button.layer.borderWidth = 3;
    // 设置边框线的颜色
    button.layer.borderColor = [UIColor redColor].CGColor;
  • 设置UIButton上的字体大小, 和button上图片的渲染
    // 改变button上的字体大小
    button.titleLabel.font = [UIFont systemFontOfSize:20];
    // 给图片加渲染, 显示图片原图效果
    [button setImage:[[UIImage imageNamed:@"Unknown.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] forState:UIControlStateNormal];

下面我们介绍一下UILabel的使用方法和注意事项!

UILabel

  • UILabel的创建
    // UILabel初始化方法创建, 并赋予frame
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 200, 200, 50)];
    // 给label赋予一个背景颜色
    label.backgroundColor = [UIColor cyanColor];
    // 给label的文本内容赋予一个颜色
    label.textColor = [UIColor redColor];
    // 向label里添加一段文本
    label.text = @"添加了一段话";
    [self.view addSubview:label];
    以上代码的显示效果为:


  • label的文本对齐方式
    label.textAlignment = NSTextAlignmentCenter; // 文字居中对齐
    label.textAlignment = NSTextAlignmentRight; // 文字居右对齐
    label.textAlignment = NSTextAlignmentLeft; // 文字居左对齐
    显示效果分别为:


    文字居中对齐

    文字居右对齐 ![文字居左对齐](http://upload-images.jianshu.io/upload_images/2486678-cea26bd30b25f8e2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  • label的文字属性(大小, 粗细, 颜色)
    // 设置字体的大小(默认是17)
    label.font = [UIFont systemFontOfSize:15];
    // 设置字体的粗细
    label.font = [UIFont boldSystemFontOfSize:15];
    // 设置字体的型号(比如宋体, 黑体等)以及字体的大小
    label.font = [UIFont fontWithName:@"AppleGothic" size:15];
  • 设置字体大小是否适应label宽度
    label.adjustsFontSizeToFitWidth = YES;
  • 设置文本是否高亮和高亮时的颜色
    label.highlighted = YES;
    label.highlightedTextColor = [UIColor redColor];
  • 设置是否能与用户进行交互
    label.userInteractionEnabled = YES;
  • 设置label中的文字是否可变,默认值是YES
    // /只是决定了Label的绘制方式,将它设置为NO将会使文本变暗,表示它没有激活,这时向它设置颜色值是无效的。
    label.enabled = NO;
  • 设置label的行数, 当为0时, 没有行数限制
    label.numberOfLines = 2;
  • 设置阴影的颜色和阴影的偏移量
    label.shadowColor = [UIColor blackColor];
    label.shadowOffset = CGSizeMake(2.0,1.0);
  • 设置当文字过长时文本的显示格式
    label.lineBreakMode = UILineBreakModeMiddleTruncation;//截去中间
    // 这是一个枚举值,枚举内容为:
    typedef enum {
    UILineBreakModeWordWrap = 0, // 以空格为边界,保留整个单词
    UILineBreakModeCharacterWrap, // 保留整个字符
    UILineBreakModeClip, // 到边界为止, 截去多余部分
    UILineBreakModeHeadTruncation, // 截去头部, 以……代替
    UILineBreakModeTailTruncation, // 截去尾部, 以……代替
    UILineBreakModeMiddleTruncation, // 截去中间, 以……代替
    } UILineBreakMode;
  • 文本的基线
    //baselineAdjustment这个值控制文本的基线位置,只有文本行数为1时有效
    label.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
    //是枚举值, 有三种方式
    typedef enum {
    UIBaselineAdjustmentAlignBaselines = 0, // 默认值文本最上端于label中线对齐
    UIBaselineAdjustmentAlignCenters,//文本中线于label中线对齐
    UIBaselineAdjustmentNone,//文本最低端与label中线对齐
    } UIBaselineAdjustment;
  • 去掉label背景色
    label.backgroundColor = [UIColor clearColor];
  • 设置最小收缩比例,如果Label宽度小于文字长度时,文字进行收缩,收缩超过比例后,停止收缩。
    label.minimumScaleFactor = 0.5;
  • Label添加边框
    titleLabel.layer.borderColor = [[UIColor grayColor] CGColor];
    titleLabel.layer.borderWidth = 2;

下面我们介绍一下UITextField的使用方法和注意事项!

UITextField

  • 创建一个textField
    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(50, 200, 200, 50)];
  • 设置UITextField的文字颜色
    textField.textColor = [UIColor redColor];
  • 设置UITextField的背景颜色
    textField.backgroundColor = [UIColor grayColor];
  • 设置UITextField的文字大小和字体
    textField.font = [UIFont fontWithName:@"Times New Roman" size:20];
  • 设置UITextField自适应文本框大小
    textField.adjustsFontSizeToFitWidth = YES;//自适应宽度
  • 设置UITextField是否拥有一键清除的功能
    textField.clearsOnBeginEditing = YES;
  • 设置是否密文输入
    textField.secureTextEntry = YES;
  • 设置一键清除按钮是否出现
    textField.clearButtonMode = UITextFieldViewModeNever;
  • 是否允许再次编辑时在内容中间插入内容
    textField.clearsOnInsertion = YES;
  • 当UITextField的样式为UITextBorderStyleNone的时候,修改背景图片
    textField.background = [UIImage imageNamed:@"Unknown-1.png"];
  • 设置UITextField的左边view(右边同理)
    UIImageView *view = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Unknown-1.png"]];
    textField.leftView = view;
    textField.leftViewMode = UITextFieldViewModeAlways;
    // leftViewMode 是一个枚举(如下)
    typedef NS_ENUM(NSInteger, UITextFieldViewMode) {
    //从不显示
    UITextFieldViewModeNever,
    //编辑的时候显示
    UITextFieldViewModeWhileEditing,
    //非编辑的时候显示
    UITextFieldViewModeUnlessEditing,
    //任何时候都显示
    UITextFieldViewModeAlways
    };
  • 设置UITextField的初始占位文字(当输入文字后消失)以及改变占位符的字体大小和颜色
    textField.placeholder = @"输入密码";
    // 设置placeholder字体的大小和颜色
    [textField setValue:[UIColor lightGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
    [textField setValue:[UIFont boldSystemFontOfSize:20] forKeyPath:@"_placeholderLabel.font"];
  • 设置UITextField的字的摆设方式
    textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
  • 设置UITextField的边框的风格
    textField.borderStyle = UITextBorderStyleRoundedRect;
  • 设置UITextField的代理
    textField.delegate = self;
  • 协议方法
    //- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField;
    //点击输入框时触发的方法,返回YES则可以进入编辑状态,NO则不能。
    //- (void)textFieldDidBeginEditing:(UITextField *)textField;
    //开始编辑时调用的方法
    //- (BOOL)textFieldShouldEndEditing:(UITextField *)textField;
    //将要结束编辑时调用的方法,返回YES则可以结束编辑状态,NO则不能
    //- (void)textFieldDidEndEditing:(UITextField *)textField;
    //结束编辑调用的方法
    //- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
    //输入字符时调用的方法
    //- (BOOL)textFieldShouldClear:(UITextField *)textField;
    //点击清除按钮时调用的函数,返回YES则可以清除,返回NO则不能清除
    - (BOOL)textFieldShouldReturn:(UITextField *)textField{
    [textField resignFirstResponder];
    return YES;
    }
    //按下return按钮的协议方法,我们让键盘消失

初次写微博,写的不好的话请指出, 谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容