UITextBorderStyle.none:无边框
UITextBorderStyle.line:直线边框
UITextBorderStyle.roundedRect:圆角矩形边框
UITextBorderStyle.bezel:边线+阴影
圆角矩形边框样例:
1
2
3
4
lettextField = UITextField(frame: CGRect(x:10, y:60, width:200, height:30))
//设置边框样式为圆角矩形
textField.borderStyle = UITextBorderStyle.roundedRect
self.view.addSubview(textField)
2,修改边框颜色、粗细、圆角半径
1
2
3
4
5
6
7
8
9
10
lettextField = UITextField(frame: CGRect(x:10, y:60, width:200, height:30))
//设置边框样式为圆角矩形
textField.borderStyle = UITextBorderStyle.roundedRect
self.view.addSubview(textField)
//修改圆角半径的话需要将masksToBounds设为true
textField.layer.masksToBounds = true
textField.layer.cornerRadius = 12.0 //圆角半径
textField.layer.borderWidth = 2.0 //边框粗细
textField.layer.borderColor = UIColor.red.cgColor //边框颜色
3,文本框提示文字
1textField.placeholder="请输入用户名"
4,文字大小超过文本框长度时自动缩小字号,而不是隐藏显示省略号
1
2
textField.adjustsFontSizeToFitWidth=true//当文字超出文本框宽度时,自动调整文字大小
textField.minimumFontSize=14 //最小可缩小的字号
5,水平/垂直对齐方式
1
2
3
4
5
6
7
8
9
/** 水平对齐 **/
textField.textAlignment = .right //水平右对齐
textField.textAlignment = .center //水平居中对齐
textField.textAlignment = .left //水平左对齐
/** 垂直对齐 **/
textField.contentVerticalAlignment = .top //垂直向上对齐
textField.contentVerticalAlignment = .center //垂直居中对齐
textField.contentVerticalAlignment = .bottom //垂直向下对齐
6,背景图片设置
1
2
textField.borderStyle = .none //先要去除边框样式
textField.background = UIImage(named:"background1")
7,清除按钮(输入框内右侧小叉)
1
2
3
textField.clearButtonMode = .whileEditing //编辑时出现清除按钮
textField.clearButtonMode = .unlessEditing //编辑时不出现,编辑后才出现清除按钮
textField.clearButtonMode = .always //一直显示清除按钮
8,密码输入框
1textField.isSecureTextEntry = true//输入内容会显示成小黑点
9,设置文本框关联的键盘类型
Default:系统默认的虚拟键盘
ASCII Capable:显示英文字母的虚拟键盘
Numbers and Punctuation:显示数字和标点的虚拟键盘
URL:显示便于输入url网址的虚拟键盘
Number Pad:显示便于输入数字的虚拟键盘
Phone Pad:显示便于拨号呼叫的虚拟键盘
Name Phone Pad:显示便于聊天拨号的虚拟键盘
Email Address:显示便于输入Email的虚拟键盘
Decimal Pad:显示用于输入数字和小数点的虚拟键盘
Twitter:显示方便些Twitter的虚拟键盘
Web Search:显示便于在网页上书写的虚拟键盘
数字键盘使用样例:
1textField.keyboardType = UIKeyboardType.numberPad
10,使文本框在界面打开时就获取焦点,并d出输入键盘
1textField.becomeFirstResponder()
11,使文本框失去焦点,并收回键盘
1textField.resignFirstResponder()
12,设置键盘 return 键的样式
1
2
3
4
5
6
textField.returnKeyType = UIReturnKeyType.done //表示完成输入
textField.returnKeyType = UIReturnKeyType.go //表示完成输入,同时会跳到另一页
textField.returnKeyType = UIReturnKeyType.search //表示搜索
textField.returnKeyType = UIReturnKeyType.join//表示注册用户或添加数据
textField.returnKeyType = UIReturnKeyType.next //表示继续下一步
textField.returnKeyType = UIReturnKeyType.send //表示发送
以发送样式(send)为例:
13,键盘 return 键的响应
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
importUIKit
classViewController: UIViewController,UITextFieldDelegate{
overridefuncviewDidLoad() {
super.viewDidLoad()
lettextField = UITextField(frame: CGRect(x:10,y:160,width:200,height:30))
//设置边框样式为圆角矩形
textField.borderStyle = UITextBorderStyle.roundedRect
textField.returnKeyType = UIReturnKeyType.done
textField.delegate=self
self.view.addSubview(textField)
}
functextFieldShouldReturn(_ textField: UITextField) ->Bool{
//收起键盘
textField.resignFirstResponder()
//打印出文本框中的值
print(textField.text ?? "")
returntrue
}
}
iOS-Swift CGContext实现-基础图形
使用CGContext必备
在文字样式属性(NSMutableParagraphStyle)中可以对文字进行设置
Text Kit在继承了Core Text所有强大功能的基础上,将功能封装为面向对象的API,让开发者们都乐开了花。在这篇教程中,你要去探索Text Kit的各种功能特性,并且你要创建一个简单的但又功能丰富的iPhone笔记应用。
本教程包含一个初始的项目,里面含有事先创建好的UI部分,以便使同学们只关注于Text Kit的部分。在这里可以下载该 项目 。下载完成后解压并在Xcode中打开项目,编译运行后你会看到如下的界面:
该示例应用创建了一个初始的数组用于存放笔记实例,然后在TableViewController中将其渲染出来,当你点击选择某条笔记时,Storyboard和segue会捕获到你的行为,然后处理视图转换的先关工作,使你看到该条笔记的详细信息。
Dynamic Type
Dynamic Type是iOS7中给我们的开发带来变化最多的特性之一,它的作用是让应用中的字体大小遵循你设置的字体大小和粗细。
在iOS7中,打开设置,可以在 通用/辅助功能(General/Accessibility) 和通用/字体大小(General/Text Size) 中查看和设置系统中应用显示字体的属性:
在iOS8中,打开设置,可以在通用/辅助功能/更大字体(General/Accessibility/Larger Text)查看Dynamic Type的文本尺寸。
不管是增加文字粗细还是改变文字大小,在支持Dynamic Type的应用中这都能给用户带来极大的便利,增加了文字的可读性。
为了让应用支持Dynamic Type,你需要设置文本遵循某一 风格 ,而不是明确的指定文本的字体名称和大小。在iOS7中已经为 UIFont 增加了一个新的方法 preferredFontForTextStyle ,它的作用是给创建出一个由用户在设置中根据自身需要设定的风格的字体。
下表中展示了六种不同字体样式的不同大小和粗细程度:
表中最左边的字体是用户可选择的最小的字体,中间是可选择的最大的字体,最右边是选择了辅助功能中给字体加粗后的样式。
最基本的功能支持
实现动态文本的基本功能还是相对较简单的。应用中的字体不再是一个明确的字体,而是需要请求一个特殊的字体样式。在运行时,应用会根据用户在设置应用中对字体的设置以及请求到的字体样式中选择一个合适的字体样式。
到了iOS8,Apple让实现Dynamic Type变得比iOS7更加容易了。尤其是TableView中的默认Label自动支持Dynamic Type,这个很赞!但是如果还想适配iOS7的话那就要在TableView中使用自定义的Label了。所以首先同学们要学会如何在iOS7中处理Dynamic Type,然后你就会发现到了iOS8后,生活是多么美好,晴空万里,没有雾霾!
为什么iOS7是优秀的系统,而iOS8是趋近完美的系统
该教程中初始项目的设置和配置是基于iOS8的。在我们开始学习之前,先编译运行应用,然后尝试改变默认的文本字体大小,多试几次不同的字体大小。你会发现不光是字体大小变了,TableView列表的Cell高度也相应发生了改变。但是你对这个项目还没动过一根手指。同时你也应该发现了点击选择一条笔记后,该笔的详细信息的文本字体却没有发生变化。
但在iOS7中我们的确还要做一些额外的事,没有十全十美的事应该指的就是这个吧。如果你的编译环境是iOS7或iOS8(确保你使用的Xcode版本是6),那么本教程的绝大部分内容都是没问题的。现在我们需要将Xcode的编译环境设置为iOS7已经选择合适的iOS模拟器(iPhone5s)。如果你不打算支持iOS8之前的系统,那么你可以直接使用iOS8的编译环境。
现在咱们在iOS7下编译运行应用,然后重复之前修改字体的 *** 作,你会发现什么?没错,发现了悲剧。应用中的字体会忽略你对字体的设置,根本不起作用。所以,同学们必须要做点什么让Dynamic Type在iOS7跑起来。
打开 NoteEditorViewController.swift ,在 viewDidLoad 方法中添加如下代码:
textView.font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)
这里需要注意的是你并没有给 textView.font 设置具体的字体,比如Helvetica Neue之类。相反,你只是请求了一个适合主体文本的字体样式UIFontTextStyleBody 。
然后打开 NotesListViewController.swift ,在tableView(_:cellForRowAtIndexPath:) 方法的 return 语句后添加如下代码:
cell.textLabel?.font = UIFont.preferredFontForTextStyle(UIFontTextStyleHeadline)
你依然没有给字体具体的类型,而是请求了一个合适的字体样式。
使用语义接近的字体样式名称,比如 UIFontTextStyleSubHeadline ,可以避免在代码中对字体样式使用硬编码,并确保你的应用中的文本信息能正确的响应用户的设置。
现在再编译和运行应用,你会发现TableView和笔记详细信息页面中的文本字体都发生了变化。下面的截图是设置不同字体大小后的笔记详细信息页面:
目前看起来一起都很完美,但是细心的读者可能会发现这种解决方法只能解决一半的问题。让我们回到设置应用然后再次更改字体大小,然后我们通过后台程序回到我们的笔记应用中,我们发现了什么?没错,文本字体没有响应我们刚才的设置从而发生变化。
我相信我们的用户是不会允许这种事情发生的。又一个挑战出现了,让我们来看看如何解决这个问题。
即时响应字体设置
打开 NoteEditorViewController.swift ,在 viewDidLoad 方法中添加如下代码:
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "preferredContentSizeChanged:",
name: UIContentSizeCategoryDidChangeNotification,
object: nil)
上面这段代码的作用是将我们的 NodeEditorViewController 注册到通知中心里,当字体发生改变时会通知 NodeEditorViewController 中的preferredContentSizeChanged 方法。
我们再来看看 preferredContentSizeChanged 方法:
func preferredContentSizeChanged(notification: NSNotification) {
textView.font = UIFont.preferredFontForTextStyle(UIFontTextStyleBody)
}
在这个方法中我们就可以改变文本的字体样式了。
注意:这里你可能会有疑惑,已经更改过字体样式了,为什么这里再次请求样式的时候还是 UIFontTextStyleBody 呢?当用户更改完字体样式后,你需要通过 preferredFontForTextStyle 方法重新请求一次字体样式,该方法的参数只代表文本的类型和所在位置,比如是Body里的还是Head中的等,所以 UIFont.preferredFontForTextStyle(UIFontTextStyleBody) 的意思就是请求类型和位置在Body中显示文本的字体样式,每次请求都是获取最新一次设置的字体样式。
打开 NotesListViewController.swift ,重写 viewDidLoad 方法:
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self,
selector: "preferredContentSizeChanged:",
name: UIContentSizeCategoryDidChangeNotification,
object: nil)
}
同学们应该注意到了,我们刚才添加的方法和NoteEditorViewController.swift 中添加的方法一样。没错,给NSNotificationCenter 注册的方法是相同的,但是preferredContentSizeChanged 方法会有点区别。
然后在 NotesListViewController.swift 中再添加preferredContentSizeChanged 方法:
func preferredContentSizeChanged(notification: NSNotification) {
tableView.reloadData()
}
上面这段代码的作用是让Tableview重新加载可见的Cell,在更新时就会触发preferredFontForTextStyle() 方法,将新设置的字体样式应用到Tableview的Cell中。
再次编译运行应用,设置字体样式,然后看看我们的应用有没有正确的响应你的设置。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)