`
jsntghf
  • 浏览: 2528566 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

设置UILabel和UITextField的Insets

    博客分类:
  • iOS
阅读更多

Insets这个名字有点让人费解,其实它表示的是内容与控件边界的距离,相当于CSS中的padding。

 

目前,在iOS的控件中,只看到UIButton可以设置Insets,对应的属性是:contentEdgeInsets、titleEdgeInsets、imageEdgeInsets,它们接受的属性类型都是UIEdgeInsets,可以由函数UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right)构造。在xib中也有界面来对按钮的这三个EdgeInsets属性进行设置,分别是按钮的Edge和 Inset属性。

 

如果想设置UILable或UITextField中的文本离边界的距离,无伦是在xib里还是直接代码的方式都无能为力,因为苹果未开放相应的属性让你去控制,所以,我们只能自定义相应的控件。

 

首先来看看UILabel的子类InsetsLabel的实现代码。

 

InsetsLabel.h

 

#import <UIKit/UIKit.h>

@interface InsetsLabel : UILabel

@property(nonatomic) UIEdgeInsets insets;

- (id)initWithFrame:(CGRect)frame andInsets:(UIEdgeInsets) insets;
- (id)initWithInsets:(UIEdgeInsets) insets;

@end

 

InsetsLabel.m

 

#import "InsetsLabel.h"

@implementation InsetsLabel

@synthesize insets = _insets;

- (id)initWithFrame:(CGRect)frame andInsets:(UIEdgeInsets)insets {
    self = [super initWithFrame:frame];
    if(self) {
        self.insets = insets;
    }
    return self;
}

- (id)initWithInsets:(UIEdgeInsets)insets {
    self = [super init];
    if(self) {
        self.insets = insets;
    }
    return self;
}

- (void)drawTextInRect:(CGRect)rect {
    return [super drawTextInRect:UIEdgeInsetsInsetRect(rect, self.insets)];
}

@end

 

再来看看UITextField的子类InsetsTextField的实现代码。

 

InsetsTextField.h

 

#import <UIKit/UIKit.h>

@interface InsetsTextField : UITextField

@end

 

InsetsTextField.m

 

#import "InsetsTextField.h"

@implementation InsetsTextField

//控制placeHolder的位置
- (CGRect)textRectForBounds:(CGRect)bounds {
    return CGRectInset(bounds, 20, 0);
}

//控制文本的位置
- (CGRect)editingRectForBounds:(CGRect)bounds {
    return CGRectInset(bounds, 20, 0);
}

@end

 

上面实现InsetsTextField的方式更像是借鉴的InsetsLabel的实现,其实对于 UITextField还有更好的实现方式,而且更简单,因为这是UITextFiled本来就支持的做法。例如它可以让你做出在文本框最前方固定放一个$符号,表示这个文本框是输入金额的,这个$是不能被删除的。确实,你可以在UITextField上贴个UILabel,然后文本框的光标后移,但这个显得有点麻烦了。

 

UITextField可以直接设置leftView或rightView,然后文本输入区域就在leftView和 rightView之间了。

 

UITextField *textField = [[UITextField alloc] init];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 10, 25)];
label.text = @"$";
label.textColor = [UIColor darkGrayColor];
label.backgroundColor = [UIColor clearColor];
textField.frame = CGRectMake(0, 0, 180, 25);
textField.borderStyle = UITextBorderStyleRoundedRect;
textField.leftView = label;
textField.leftViewMode = UITextFieldViewModeAlways;
[self.view addSubview:textField];
[label release];
[textField release];
分享到:
评论

相关推荐

    iOS_UILabel and UITextField

    在iOS开发中,`UILabel`和`UITextField`是两个非常重要的UI组件,它们在构建用户界面时起到不可或缺的作用。这两个控件都属于UIKit框架,用于显示文本内容,但它们的功能和用途有所不同。让我们深入探讨一下它们的...

    UITextField常用属性及设置

    了解并熟练掌握UITextField的各种属性和设置方法,能帮助开发者创建更高效、更符合用户需求的界面。 首先,我们来看一些UITextField的基础属性: 1. `placeholder`:这个属性用于设置输入框的占位符,即用户未输入...

    swift-UILabel的text设置不同颜色字体

    下面我们将详细探讨如何在Swift中为`UILabel`的`text`设置不同颜色和字体。 首先,我们需要了解`NSAttributedString`。`NSAttributedString`是Foundation框架中的一个类,它允许我们在文本中包含属性,如颜色、字体...

    滚动的UILabel,跑马灯

    `UILabel` 的 `text` 属性用于设置显示的文本,`frame` 决定了其显示区域,`numberOfLines` 控制显示的行数,`lineBreakMode` 设置文本断行模式,而 `contentMode` 影响内容的显示方式。默认情况下,`UILabel` 只会...

    JSPatch学习笔记-UI基础

    代码中是JSPatch学习笔记的UI基础部分,其中包括以下内容: 1. 项目环境配置 2. 变量 * 局部变量 * 全局变量 ... * UITextField * 文本框内容改变事件监听 * UIAlertView * 弹框 * 监听按钮点击事件

    UILabel局部点击

    如果你知道要点击的部分是特定格式(如电话号码、URL等),可以通过创建`NSAttributedString`并设置`UILabel`的`attributedText`属性,然后开启`UIWebView`的`dataDetectorTypes`,系统会自动识别并处理这些格式。...

    UILabel 宽度和高度自适应的方法

    当我们需要让UILabel根据文本内容自动调整其宽度和高度以适应显示时,我们可以采用以下几种方法: 1. **高度自适应(AutoHeight)** - `numberOfLines` 属性:默认情况下,UILabel的`numberOfLines`为1,表示单行...

    UILabel、UILabel基本用法、UILabel详解

    - **描述**:通过`font`属性可以设置`UILabel`中文本的字体和大小。默认字体为系统字体,字号为17。 - **示例代码**: ```objective-c self.myLabel.font = [UIFont systemFontOfSize:30]; ``` 若要设置为系统...

    IOS 我在哪 (WhereAmI)

    1) 实用型应用模板 2) UIView、UILabel、UITextField、UIButton和UITextView 等基本控件使用 3) iOS位置服务 4) Web Google地图API 5) 本地Google地图API

    UILabel内容中某个文字添加点击事件

    首先,我们需要创建一个名为`UILabel+YBAttributeTextTapAction`的Category,包含头文件`UILabel+YBAttributeTextTapAction.h`和实现文件`UILabel+YBAttributeTextTapAction.m`。在头文件中,我们声明一个block类型...

    UILabel的text设置不同颜色、字体

    本篇文章将详细讲解如何通过编程方式来为UILabel的text属性设置不同的颜色和字体,以实现丰富的文本展示效果。 首先,我们要了解如何设置UILabel的基本颜色。在Swift中,我们可以使用`textColor`属性来改变文字颜色...

    swift-UIlabel根据文本字体获得label宽度;自适应宽高

    在Swift开发中,文本输入和显示是用户界面(UI)设计的重要组成部分,UILabel是一个常用的类,用于展示单行或多行的静态文本。本教程将详细讲解如何根据文本内容和字体来计算UILabel的宽度,并实现其自适应宽高的...

    iOS 设置UILabel的行间距并自适应高度的方法

    同时,确保`numberOfLines`设置为0,`lineBreakMode`设置为`.byWordWrapping`,以实现多行显示和换行处理。 这个方法适用于需要动态调整文本显示效果的场景,比如在阅读类应用、消息列表或者设置界面等。在开发过程...

    UITextField扩展

    本文档提供了一套对 `UITextField` 的扩展方法,这些方法可以帮助开发者更方便地创建和自定义文本框。 #### 文件结构 文档包含了两个部分:`.h` 头文件和 `.m` 实现文件。 1. **UITextField+Jex.h**:头文件声明...

    UILabel of UIKit

    2. **font**: 设置 UILabel 中文字体的大小和样式。 3. **textColor**: 设置 UILabel 文本的颜色。 4. **numberOfLines**: 设置 UILabel 最多可以显示的行数。 5. **lineBreakMode**: 设置 UILabel 的换行方式。 6. ...

    ios中可以调整文字间距 行间距 段落间距的自定义UILabel

    `UILabel`默认情况下只支持基本的字体、颜色和对齐方式的设置,但在特定场景下,如需要调整文字间距、行间距以及段落间距时,就显得力不从心。为了解决这个问题,我们可以使用自定义的`UILabel`子类来实现更精细化的...

    ios-自定义内边距UILabel.zip

    `UILabel`是苹果提供的一个基础视图,用于显示单行或多行的文本,但默认情况下,它并不支持直接设置内边距。不过,通过一些技巧和自定义扩展,我们可以实现这个功能。下面将详细介绍如何在iOS应用中自定义`UILabel`...

    UITextView 实现UITextField功能

    在iOS开发中,`UITextField`和`UITextView`是两种常用的文本输入控件。`UITextField`通常用于单行文本输入,而`UITextView`则适用于多行文本输入。然而,在某些场景下,开发者可能希望`UITextView`具备`UITextField`...

    TextKit图文混排

    TextKit 是iOS7新推出的类库,在CoreText 的基础上封装的,主要用来做图文...TextKit 没有新增加类,他就是在原来有的文本显示控件上加以封装,所以我们经常使用的UILabel、UITextField、UITextView在这里都可以使用

Global site tag (gtag.js) - Google Analytics