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`和`UITextField`是两个非常重要的UI组件,它们在构建用户界面时起到不可或缺的作用。这两个控件都属于UIKit框架,用于显示文本内容,但它们的功能和用途有所不同。让我们深入探讨一下它们的...
了解并熟练掌握UITextField的各种属性和设置方法,能帮助开发者创建更高效、更符合用户需求的界面。 首先,我们来看一些UITextField的基础属性: 1. `placeholder`:这个属性用于设置输入框的占位符,即用户未输入...
下面我们将详细探讨如何在Swift中为`UILabel`的`text`设置不同颜色和字体。 首先,我们需要了解`NSAttributedString`。`NSAttributedString`是Foundation框架中的一个类,它允许我们在文本中包含属性,如颜色、字体...
`UILabel` 的 `text` 属性用于设置显示的文本,`frame` 决定了其显示区域,`numberOfLines` 控制显示的行数,`lineBreakMode` 设置文本断行模式,而 `contentMode` 影响内容的显示方式。默认情况下,`UILabel` 只会...
代码中是JSPatch学习笔记的UI基础部分,其中包括以下内容: 1. 项目环境配置 2. 变量 * 局部变量 * 全局变量 ... * UITextField * 文本框内容改变事件监听 * UIAlertView * 弹框 * 监听按钮点击事件
如果你知道要点击的部分是特定格式(如电话号码、URL等),可以通过创建`NSAttributedString`并设置`UILabel`的`attributedText`属性,然后开启`UIWebView`的`dataDetectorTypes`,系统会自动识别并处理这些格式。...
当我们需要让UILabel根据文本内容自动调整其宽度和高度以适应显示时,我们可以采用以下几种方法: 1. **高度自适应(AutoHeight)** - `numberOfLines` 属性:默认情况下,UILabel的`numberOfLines`为1,表示单行...
- **描述**:通过`font`属性可以设置`UILabel`中文本的字体和大小。默认字体为系统字体,字号为17。 - **示例代码**: ```objective-c self.myLabel.font = [UIFont systemFontOfSize:30]; ``` 若要设置为系统...
1) 实用型应用模板 2) UIView、UILabel、UITextField、UIButton和UITextView 等基本控件使用 3) iOS位置服务 4) Web Google地图API 5) 本地Google地图API
首先,我们需要创建一个名为`UILabel+YBAttributeTextTapAction`的Category,包含头文件`UILabel+YBAttributeTextTapAction.h`和实现文件`UILabel+YBAttributeTextTapAction.m`。在头文件中,我们声明一个block类型...
本篇文章将详细讲解如何通过编程方式来为UILabel的text属性设置不同的颜色和字体,以实现丰富的文本展示效果。 首先,我们要了解如何设置UILabel的基本颜色。在Swift中,我们可以使用`textColor`属性来改变文字颜色...
在Swift开发中,文本输入和显示是用户界面(UI)设计的重要组成部分,UILabel是一个常用的类,用于展示单行或多行的静态文本。本教程将详细讲解如何根据文本内容和字体来计算UILabel的宽度,并实现其自适应宽高的...
同时,确保`numberOfLines`设置为0,`lineBreakMode`设置为`.byWordWrapping`,以实现多行显示和换行处理。 这个方法适用于需要动态调整文本显示效果的场景,比如在阅读类应用、消息列表或者设置界面等。在开发过程...
本文档提供了一套对 `UITextField` 的扩展方法,这些方法可以帮助开发者更方便地创建和自定义文本框。 #### 文件结构 文档包含了两个部分:`.h` 头文件和 `.m` 实现文件。 1. **UITextField+Jex.h**:头文件声明...
2. **font**: 设置 UILabel 中文字体的大小和样式。 3. **textColor**: 设置 UILabel 文本的颜色。 4. **numberOfLines**: 设置 UILabel 最多可以显示的行数。 5. **lineBreakMode**: 设置 UILabel 的换行方式。 6. ...
`UILabel`默认情况下只支持基本的字体、颜色和对齐方式的设置,但在特定场景下,如需要调整文字间距、行间距以及段落间距时,就显得力不从心。为了解决这个问题,我们可以使用自定义的`UILabel`子类来实现更精细化的...
`UILabel`是苹果提供的一个基础视图,用于显示单行或多行的文本,但默认情况下,它并不支持直接设置内边距。不过,通过一些技巧和自定义扩展,我们可以实现这个功能。下面将详细介绍如何在iOS应用中自定义`UILabel`...
在iOS开发中,`UITextField`和`UITextView`是两种常用的文本输入控件。`UITextField`通常用于单行文本输入,而`UITextView`则适用于多行文本输入。然而,在某些场景下,开发者可能希望`UITextView`具备`UITextField`...
TextKit 是iOS7新推出的类库,在CoreText 的基础上封装的,主要用来做图文...TextKit 没有新增加类,他就是在原来有的文本显示控件上加以封装,所以我们经常使用的UILabel、UITextField、UITextView在这里都可以使用