iOS 8开发指南
上QQ阅读APP看书,第一时间看更新

第7章 文本框和文本视图

在本章前面的内容中,已经创建了一个简单的应用程序,并学会了应用程序基础框架和图形界面基础框架。在本章的内容中,将详细介绍iOS应用中的基本构件,向读者讲解使用可编辑的文本框和文本视图的基本知识。

7.1 文本框(UITextField)

在iOS应用中,文本框和文本视图都是用于实现文本输入的,在本节的内容中,将首先详细讲解文本框的基本知识,为读者步入本书后面知识的学习打下基础

7.1.1 文本框基础

在iOS应用中,文本框(UITextField)是一种常见的信息输入机制,类似于Web表单中的表单字段。当在文本框中输入数据时,可以使用各种iOS键盘将其输入限制为数字或文本。和按钮一样,文本框也能响应事件,但是通常将其实现为被动(passive)界面元素,这意味着视图控制器可随时通过text属性读取其内容。

控件UITextField的常用属性如下所示。

(1)borderStyle属性:设置输入框的边框线样式。

(2)backgroundColor属性:设置输入框的背景颜色,使用其font属性设置字体。

(3)clearButtonMode属性:设置一个清空按钮,通过设置clearButtonMode可以指定是否以及何时显示清除按钮。此属性主要有如下几种类型。

UITextFieldViewModeAlways:不为空,获得焦点与没有获得焦点都显示清空按钮;

UITextFieldViewModeNever:不显示清空按钮;

UITextFieldViewModeWhileEditing:不为空,且在编辑状态时(及获得焦点)显示清空按钮;

UITextFieldViewModeUnlessEditing:不为空,且不在编译状态时(焦点不在输入框上)显示清空按钮。

(4)background属性:设置一个背景图片。

7.1.2 实战演练——在屏幕中显示一个文本输入框

在iOS应用中,可以使用控件UITextField在屏幕中显示一个文本输入框。UITextField通常用于外部数据输入,以实现人机交互。在本实例中,使用UItextField控件设置了一个文本输入框,并设置在框中显示提示文本“请输入信息”。

实例文件UIKitPrjPlaceholder.m的具体实现代码如下所示:

#import "UIKitPrjPlaceholder.h"

@implementation UIKitPrjPlaceholder

- (void)viewDidLoad {

[super viewDidLoad];

self.view.backgroundColor = [UIColor whiteColor];

UITextField* textField = [[[UITextField alloc] init]

autorelease];

textField.frame = CGRectMake( 20, 100, 280, 30 );

textField.borderStyle = UITextBorderStyleRoundedRect;

textField.contentVerticalAlignment =

UIControlContentVerticalAlignmentCenter;

textField.placeholder = @"请输入信息";

[self.view addSubview:textField];

}

@end

执行后的效果如图7-1所示。

图7-1 执行效果

7.1.3 实战演练——设置文本输入框的边框线样式

在本实例中,首先使用UITextField控件设置了4个文本输入框,然后使用borderStyle属性为这4个输入框设置了不同的边框线样式。

注意:为了便于对比,本书中的很多实例在同一个工程文件中实现。

实例文件 UIKitPrjSimple.m的具体实现代码如下所示:

#import "UIKitPrjSimple.h"

@implementation UIKitPrjSimple

- (void)dealloc {

[textFields_ release];

[super dealloc];

}

- (void)viewDidLoad {

[super viewDidLoad];

self.view.backgroundColor = [UIColor whiteColor];

UITextField* textField1 = [[[UITextField alloc] init] autorelease];

textField1.delegate = self;

textField1.frame = CGRectMake( 20, 20, 280, 30 );

textField1.borderStyle = UITextBorderStyleLine;

textField1.text = @"aaaaaaaaa";

textField1.returnKeyType = UIReturnKeyNext;

[self.view addSubview:textField1];

UITextField* textField2 = [[[UITextField alloc] init] autorelease];

textField2.delegate = self;

textField2.frame = CGRectMake( 20, 60, 280, 30 );

textField2.borderStyle = UITextBorderStyleBezel;

textField2.text = @"bbbbbbbbb";

textField2.returnKeyType = UIReturnKeyNext;

[self.view addSubview:textField2];

UITextField* textField3 = [[[UITextField alloc] init] autorelease];

textField3.delegate = self;

textField3.frame = CGRectMake( 20, 100, 280, 30 );

textField3.borderStyle = UITextBorderStyleRoundedRect;

textField3.text = @"ccccccccccc";

textField3.returnKeyType = UIReturnKeyNext;

[self.view addSubview:textField3];

UITextField* textField4 = [[[UITextField alloc] init] autorelease];

textField4.delegate = self;

textField4.frame = CGRectMake( 20, 140, 280, 30 );

textField4.borderStyle = UITextBorderStyleNone;

textField4.text = @"ddddddddddd";

textField4.returnKeyType = UIReturnKeyNext;

[self.view addSubview:textField4];

textFields_ = [[NSArray alloc] initWithObjects:textField1, textField2, textField3,

textField4, nil];

}

- (void)textFieldDidBeginEditing:(UITextField*)textField {

currentFieldIndex_ = [textFields_ indexOfObject:textField];

}

- (BOOL)textFieldShouldReturn:(UITextField*)textField {

if ( textFields_.count <= ++currentFieldIndex_ ) {

currentFieldIndex_ = 0;

}

UITextField* newField = [textFields_ objectAtIndex:currentFieldIndex_];

if ( [newField canBecomeFirstResponder] ) {

[newField becomeFirstResponder];

}

return YES;

}

@end

执行后的效果如图7-2所示。

图7-2 执行效果

7.1.4 实战演练——设置文本输入框的字体和颜色

在本实例中,首先使用UITextField控件设置了1个文本输入框,然后设置了输入框中默认显示的文本为“看我的字体和颜色”,并设置了文本的字体和整个输入框的背景颜色。

实例文件 UIKitPrjChangeColorAndFont.m的具体实现代码如下所示。

#import "UIKitPrjChangeColorAndFont.h"

@implementation UIKitPrjChangeColorAndFont

- (void)viewDidLoad {

[super viewDidLoad];

self.view.backgroundColor = [UIColor whiteColor];

UITextField* textField = [[[UITextField alloc] init] autorelease];

textField.frame = CGRectMake( 20, 100, 280, 50 );

textField.borderStyle = UITextBorderStyleBezel;

textField.backgroundColor = [UIColor blackColor];

//设置背景色

textField.textColor = [UIColor redColor];//设置文本颜色

textField.textAlignment = UITextAlignmentCenter;

textField.font = [UIFont systemFontOfSize:36];

//设置字体大小

textField.text = @"看我的字体和颜色";

[self.view addSubview:textField];

}

@end

执行后的效果如图7-3所示。

图7-3 执行效果

7.1.5 实战演练——在文本输入框中设置一个清空按钮

在本实例中,首先使用UITextField控件设置了4个文本输入框,然后分别为这4个输入框设置了不同类型的清空按钮。

实例文件 UIKitPrjClearButtonMode.m的具体实现代码如下所示:

#import "UIKitPrjClearButtonMode.h"

@implementation UIKitPrjClearButtonMode

- (void)dealloc {

[textFields_ release];

[super dealloc];

}

- (void)viewDidLoad {

[super viewDidLoad];

self.view.backgroundColor = [UIColor whiteColor];

UITextField* textField1 = [[[UITextField alloc] init] autorelease];

textField1.delegate = self;

textField1.clearsOnBeginEditing = YES;

textField1.frame = CGRectMake( 20, 20, 280, 30 );

textField1.borderStyle = UITextBorderStyleRoundedRect;

textField1.clearButtonMode = UITextFieldViewModeNever;

textField1.text = @"UITextFieldViewModeNever";

[self.view addSubview:textField1];

UITextField* textField2 = [[[UITextField alloc] init] autorelease];

textField2.delegate = self;

textField2.frame = CGRectMake( 20, 60, 280, 30 );

textField2.borderStyle = UITextBorderStyleRoundedRect;

textField2.clearButtonMode = UITextFieldViewModeWhileEditing;

textField2.text = @"UITextFieldViewModeWhileEditing";

[self.view addSubview:textField2];

UITextField* textField3 = [[[UITextField alloc] init] autorelease];

textField3.delegate = self;

textField3.frame = CGRectMake( 20, 100, 280, 30 );

textField3.borderStyle = UITextBorderStyleRoundedRect;

textField3.clearButtonMode = UITextFieldViewModeUnlessEditing;

textField3.text = @"UITextFieldViewModeUnlessEditing";

[self.view addSubview:textField3];

UITextField* textField4 = [[[UITextField alloc] init] autorelease];

textField4.delegate = self;

textField4.frame = CGRectMake( 20, 140, 280, 30 );

textField4.borderStyle = UITextBorderStyleRoundedRect;

textField4.clearButtonMode = UITextFieldViewModeAlways;

textField4.text = @"UITextFieldViewModeAlways";

[self.view addSubview:textField4];

textFields_ = [[NSArray alloc] initWithObjects:textField1, textField2, textField3,

textField4, nil];

}

- (BOOL)textFieldShouldClear:(UITextField*)textField {

NSLog( @"textFieldShouldClear:%@", textField.text );

return YES;

}

@end

执行后的效果如图7-4所示。

图7-4 执行效果

7.1.6 实战演练——为文本输入框设置背景图片

在本实例中,首先用 UITextField在屏幕中设置一个文本输入框,然后使用“textField.background =stretchableWhitePaper”语句为输入框设置了背景图片。

实例文件 UIKitPrjBackground.m 的具体实现代码如下所示:

#import "UIKitPrjBackground.h"

@implementation UIKitPrjBackground

- (void)viewDidLoad {

[super viewDidLoad];

self.view.backgroundColor = [UIColor whiteColor];

//导入背景图片,并设置成自动伸缩

UIImage* imageWhitePaper = [UIImage imageNamed:@"paper.png"];

UIImage* stretchableWhitePaper = [imageWhitePaper

stretchableImageWithLeftCapWidth:20 topCapHeight:20];

UIImage* imageGrayPaper = [UIImage imageNamed:@"paperGray.png"];

UIImage* stretchableGrayPaper = [imageGrayPaper stretchableImageWithLeftCapWidth:20

topCapHeight:20];

//创建UITextField实例

UITextField* textField = [[[UITextField alloc] init] autorelease];

textField.delegate = self;

textField.frame = CGRectMake( 20, 100, 280, 50 );

textField.background = stretchableWhitePaper;//设置背景图片

textField.disabledBackground = stretchableGrayPaper;

textField.text = @"有图片";

textField.textAlignment = UITextAlignmentCenter;

textField.contentVerticalAlignment = UIControlContentHorizontalAlignmentCenter;

[self.view addSubview:textField];

}

- (BOOL)textFieldShouldReturn:(UITextField*) textField {

textField.enabled = NO;

return YES;

}

@end

执行后的效果如图7-5所示。

图7-5 执行效果

7.1.7 实战演练——使用UITextField控件(基于Swift实现)

在本节的内容中,将通过一个具体实例的实现过程,详细讲解基于Swift语言使用UITextField控件的过程。

(1)打开Xcode 6,然后创建一个名为“UI007”的工程,工程的最终目录结构如图7-6所示。

图7-6 工程的目录结构

(2)编写文件RootViewController.swift,功能是在UITableView 控件中列表显示“self.items”中的条目,在“self.items”中只是包含了 UITextField控件。文件RootViewController.swift的具体实现代码如下所示:

import UIKit

class RootViewController : UIViewController, UITableViewDelegate, UITableViewDataSource

{

var tableView : UITableView?

var items  : NSArray?

override func viewDidLoad()

{

self.title="Swift"

self.items = ["UITextField"]

self.tableView = UITableView(frame:self.view.frame,

style:UITableViewStyle.Plain)

self.tableView!.delegate = self

self.tableView!.dataSource = self

self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier:

"Cell")

self.view?.addSubview(self.tableView)

}

此时工程UI主界面的执行效果如图7-7所示。

图7-7 工程UI主界面的执行效果

(3)文件的 DetailViewController.swift功能是,当单击条目中的UITextField控件名称时,会在新界面中演示这个控件的功能。文件DetailViewController.swift的主要实现代码如下所示:

import UIKit

class DetailViewController:UIViewController,UIPickerViewDataSource,UIPickerViewDelegate

{

override func viewDidLoad()

{

self.view!.backgroundColor=UIColor.whiteColor()

if self.title == "UITextField"

{

var textField=UITextField(frame:CGRectMake(60.0, 120.0, 200.0, 30.0))

textField.backgroundColor = UIColor.lightGrayColor()

textField.placeholder = "input text"

self.view.addSubview(textField)

}

else

{}

}

到此为止,整个实例介绍完毕。单击UI主界面中“UITextField”列表项,在新界面中输入文本后的执行效果如图7-8所示。

图7-8 单击UI主界面中“UITextField”列表项后的界面

7.2 文本视图(UITextView)

文本视图(UITextView)与文本框类似,差别在于文本视图可显示一个可滚动和编辑的文本块,供用户阅读或修改。仅当需要的输入很多时,才应使用文本视图。

7.2.1 文本视图基础

在iOS应用中,UITextView是一个类。在Xcode中当使用IB给视图拖上去一个文本框后,选中文本框后可以在Attribute Inspector中设置其各种属性。

Attribute Inspector分为3部分,分别是Text Field、Control和View部分。我们重点看看Text Field 部分,Text Field部分有以下选项。

(1)Text:设置文本框的默认文本。

(2)Placeholder:可以在文本框中显示灰色的字,用于提示用户应该在这个文本框输入什么内容。当这个文本框中输入了数据时,用于提示的灰色的字将会自动消失。

(3)Background:设置背景。

(4)Disabled:若选中此项,用户将不能更改文本框内容。

(5)接下来是3个按钮,用来设置对齐方式。

(6)Border Style:选择边界风格。

(7)Clear Button:这是一个下拉菜单,你可以选择清除按钮什么时候出现,所谓清除按钮就是出一个现在文本框右边的小×,可以有以下选择:

Never appears:从不出现。

Appears while editing:编辑时出现。

Appears unless editing:编辑时不出现。

Is always visible:总是可见。

(8)Clear when editing begins:若选中此项,则当开始编辑这个文本框时,文本框中之前的内容会被清除掉。比如,先在这个文本框A中输入了“What”,之后去编辑文本框B,若再回来编辑文本框 A,则其中的“What”会被立即清除。

(9)Text Color:设置文本框中文本的颜色。

(10)Font:设置文本的字体与字号。

(11)Min Font Size:设置文本框可以显示的最小字体(不过我感觉没什么用)

(12)Adjust To Fit:指定当文本框尺寸减小时文本框中的文本是否也要缩小。选择它,可以使得全部文本都可见,即使文本很长。但是这个选项要跟Min Font Size配合使用,文本再缩小,也不会小于设定的 Min Font Size。

接下来的部分用于设置键盘如何显示。

(13)Captitalization: 设置大写。下拉菜单中有4个选项。

None:不设置大写。

Words:每个单词首字母大写,这里的单词指的是以空格分开的字符串。

Sentances:每个句子的第一个字母大写,这里的句子是以句号加空格分开的字符串。

All Characters:所有字母大写。

(14)Correction:检查拼写,默认是YES。

(15)Keyboard:选择键盘类型,比如全数字、字母和数字等。

(16)Return Key:选择返回键,可以选择Search、Return、Done等。

(17)Auto-enable Return Key:如选择此项,则只有至少在文本框输入一个字符后键盘的返回键才有效。

(18)Secure:当你的文本框用作密码输入框时,可以选择这个选项,此时,字符显示为星号。

在iOS应用中,可以使用UITextView在屏幕中显示文本,并且能够同时显示多行文本。UITextView的常用属性如下所示。

(1)textColor属性:设置文本的的颜色。

(2)font属性:设置文本的字体和大小。

(3)editable属性:如果设置为YES,可以将这段文本设置为可编辑的。

(4)textAlignment属性:设置文本的对齐方式,此属性有如下3个值:

UITextAlignmentRight:右对齐;

UITextAlignmentCenter:居中对齐;

UITextAlignmentLeft:左对齐。

7.2.2 实战演练——在屏幕中换行显示文本

在本实例中,使用控件UITextView在屏幕中同时显示了12行文本。并且设置了文本的颜色是白色,设置了字体大小是32。

实例文件 UIKitPrjTextView.m的具体代码如下所示。

#import "UIKitPrjTextView.h"

@implementation UIKitPrjTextView

- (void)viewDidLoad {

[super viewDidLoad];

UITextView* textView = [[[UITextView alloc] init] autorelease];

textView.frame = self.view.bounds;

textView.autoresizingMask =

UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

//textView.editable = NO; // 不可编辑

textView.backgroundColor = [UIColor blackColor]; // 背景为黑色

textView.textColor = [UIColor whiteColor]; // 字符为白色

textView.font = [UIFont systemFontOfSize:32]; // 字体的设置

textView.text = @"学习UITextView!\n"

"第2行\n"

"第3行\n"

"第4行\n"

"第5行\n"

"第6行\n"

"第7行\n"

"第8行\n"

"第9行\n"

"第10行\n"

"第11行\n"

"第12行\n";

[self.view addSubview:textView];

}

@end

执行后的效果如图7-9所示。

图7-9 执行效果

7.2.3 实战演练——在屏幕中显示可编辑的文本

在本实例中,使用控件UITextView在屏幕中显示了一段文本“亲们,可以编辑这一段文本。”,然后将其editable属性设置为YES。当单击“Edit”按钮后可以编辑这段文本,单击“Done”按钮后可以完成对这段文本的编辑操作。

实例文件 UIKitPrjEditableTextView.m的具体代码如下所示:

#import "UIKitPrjEditableTextView.h"

@implementation UIKitPrjEditableTextView

- (void)dealloc {

[textView_ release];

[super dealloc];

}

- (void)viewDidLoad {

[super viewDidLoad];

textView_ = [[UITextView alloc] init];

textView_.frame = self.view.bounds;

textView_.autoresizingMask = UIViewAutoresizingFlexibleWidth |

UIViewAutoresizingFlexibleHeight;

textView_.delegate = self;

textView_.text = @"亲们,可以编辑这一段文本。";

[self.view addSubview:textView_];

}

- (void)viewWillAppear:(BOOL)animated {

[super viewWillAppear:animated];

[self.navigationController setNavigationBarHidden:NO animated:YES];

[self.navigationController setToolbarHidden:NO animated:YES];

}

- (void)viewDidAppear:(BOOL)animated {

[super viewDidAppear:animated];

[self textViewDidEndEditing:textView_]; // 画面显示时设置为非编辑模式

}

- (void)viewWillDisappear:(BOOL)animated {

[super viewWillDisappear:animated];

[textView_ resignFirstResponder]; // 画面跳转时设置为非编辑模式

}

- (void)textViewDidBeginEditing:(UITextView*)textView {

static const CGFloat kKeyboardHeight = 216.0;

// 按钮设置为[完成]

self.navigationItem.rightBarButtonItem =

[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone

target:self action:@selector(doneDidPush)] autorelease];

[UIView beginAnimations:nil context:nil];

[UIView setAnimationDuration:0.3];

// 缩小UITextView以免被键盘挡住

CGRect textViewFrame = textView.frame;

textViewFrame.size.height = self.view.bounds.size.height - kKeyboardHeight;

textView.frame = textViewFrame;

// 工具条位置上移

CGRect toolbarFrame = self.navigationController.toolbar.frame;

toolbarFrame.origin.y =

self.view.window.bounds.size.height - toolbarFrame.size.height - kKeyboardHeight;

self.navigationController.toolbar.frame = toolbarFrame;

[UIView commitAnimations];

}

- (void)textViewDidEndEditing:(UITextView*)textView {

// 按钮设置为[编辑]

self.navigationItem.rightBarButtonItem =

[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit

target:self action:@selector(editDidPush)] autorelease];

[UIView beginAnimations:nil context:nil];

[UIView setAnimationDuration:0.3];

// 恢复UITextView的尺寸

textView.frame = self.view.bounds;

// 恢复工具条的位置

CGRect toolbarFrame = self.navigationController.toolbar.frame;

toolbarFrame.origin.y =

self.view.window.bounds.size.height - toolbarFrame.size.height;

self.navigationController.toolbar.frame = toolbarFrame;

[UIView commitAnimations];

}

- (void)editDidPush {

[textView_ becomeFirstResponder];

}

- (void)doneDidPush {

[textView_ resignFirstResponder];

}

@end

执行后的效果如图7-10所示。单击“Edit”按钮后可以编辑这段文字,如图7-11所示。

图7-10 执行效果

图7-11 编辑界面

7.2.4 实战演练——设置屏幕中文本的对齐方式

在本实例中,使用控件UITextView在屏幕中显示了一段文本“此文本可编辑”,然后在工具条中添加了4个按钮。其中通过按钮“alignment”可以控制文本的对齐方式,通过按钮“Selection”可以获得文本的范围。

实例文件 UIKitPrjWorkingWithTheSelection.m的具体实现流程如下所示:

#import "UIKitPrjWorkingWithTheSelection.h"

static const CGFloat kKeyboardHeight = 216.0;

@implementation UIKitPrjWorkingWithTheSelection

- (void)dealloc {

[textView_ release];

[super dealloc];

}

- (void)viewDidLoad {

[super viewDidLoad];

// UITextView的追加

textView_ = [[UITextView alloc] init];

textView_.frame = self.view.bounds;

textView_.autoresizingMask = UIViewAutoresizingFlexibleWidth |

UIViewAutoresizingFlexibleHeight;

textView_.text = @"此文本可编辑。";

[self.view addSubview:textView_];

// 在工具条中追加按钮

UIBarButtonItem* hasTextButton =

[[[UIBarButtonItem alloc] initWithTitle:@"hasText"

style:UIBarButtonItemStyleBordered

target:self

action:@selector(hasTextDidPush)] autorelease];

UIBarButtonItem* selectionButton =

[[[UIBarButtonItem alloc] initWithTitle:@"selection"

style:UIBarButtonItemStyleBordered

target:self

action:@selector(selectionDidPush)] autorelease];

UIBarButtonItem* alignmentButton =

[[[UIBarButtonItem alloc] initWithTitle:@"alignment"

style:UIBarButtonItemStyleBordered

target:self

action:@selector(alignmentDidPush)] autorelease];

UIBarButtonItem* scrollButton =

[[[UIBarButtonItem alloc] initWithTitle:@"top"

style:UIBarButtonItemStyleBordered

target:self

action:@selector(scrollDidPush)] autorelease];

NSArray* buttons = [NSArray arrayWithObjects:hasTextButton, selectionButton,

alignmentButton, scrollButton, nil];

[self setToolbarItems:buttons animated:YES];

}

- (void)viewDidAppear:(BOOL)animated {

[super viewDidAppear:animated];

// 调整工具条位置

[UIView beginAnimations:nil context:nil];

[UIView setAnimationDuration:0.3];

textView_.frame =

CGRectMake( 0, 0, self.view.bounds.size.width, self.view.bounds.size.height -

kKeyboardHeight );

CGRect toolbarFrame = self.navigationController.toolbar.frame;

toolbarFrame.origin.y =

self.view.window.bounds.size.height - toolbarFrame.size.height - kKeyboardHeight;

self.navigationController.toolbar.frame = toolbarFrame;

[UIView commitAnimations];

[textView_ becomeFirstResponder]; //< 画面显示时显示键盘

}

- (void)viewWillDisappear:(BOOL)animated {

[super viewWillDisappear:animated];

// 恢复工具条

[UIView beginAnimations:nil context:nil];

[UIView setAnimationDuration:0.3];

textView_.frame = self.view.bounds;

CGRect toolbarFrame = self.navigationController.toolbar.frame;

toolbarFrame.origin.y = self.view.window.bounds.size.height -

toolbarFrame.size.height;

self.navigationController.toolbar.frame = toolbarFrame;

[UIView commitAnimations];

[textView_ resignFirstResponder]; // 画面隐藏时隐藏键盘

}

- (void)hasTextDidPush {

UIAlertView* alert = [[[UIAlertView alloc] init] autorelease];

if ( textView_.hasText ) {

alert.message = @"textView_.hasText = YES";

} else {

alert.message = @"textView_.hasText = NO";

}

[alert addButtonWithTitle:@"OK"];

[alert show];

}

- (void)selectionDidPush {

UIAlertView* alert = [[[UIAlertView alloc] init] autorelease];

alert.message = [NSString stringWithFormat:@"location = %d, length = %d",

textView_.selectedRange.location, textView_.selectedRange.length];

[alert addButtonWithTitle:@"OK"];

[alert show];

}

- (void)alignmentDidPush {

textView_.editable = NO;

if ( UITextAlignmentRight <

++textView_.textAlignment ) {

textView_.textAlignment = UITextAlignmentLeft;

}

textView_.editable = YES;

}

- (void)scrollDidPush {

// NSRange scrollRange = NSMakeRange( 0, 1 );

[textView_ scrollRangeToVisible:NSMakeRange( 0,

1 )];

}

@end

执行后的效果如图7-12所示。

图7-12 执行效果

7.2.5 实战演练——使用UITextView控件(基于Swift实现)

在本节的内容中,将通过一个具体实例的实现过程,详细讲解基于Swift语言使用UITextView控件的过程。

(1)打开Xcode 6,然后创建一个名为“UI014”的工程,工程的最终目录结构如图7-13所示。

图7-13 工程的目录结构

(2)编写文件RootViewController.swift,功能是在UITableView 控件中列表显示“self.items”中的条目,在“self.items”中只是包含了UITextView控件。文件RootViewController.swift的具体实现代码如下所示:

import UIKit

class RootViewController : UIViewController, UITableViewDelegate,

UITableViewDataSource

{

var tableView : UITableView?

var items: NSArray?

override func viewDidLoad()

{

self.title="Swift"

self.items = ["UITextView"]

self.tableView=UITableView(frame:self.view.frame,style:UITableViewStyle.Plain)

self.tableView!.delegate = self

self.tableView!.dataSource = self

self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier:

"Cell")

self.view?.addSubview(self.tableView)

}

此时工程UI主界面的执行效果如图7-14所示。

图7-14 工程UI主界面的执行效果

(3)文件的 DetailViewController.swift功能是,当单击条目中的UITextView控件名称时,会在新界面中演示这个控件的功能。文件DetailViewController.swift的主要实现代码如下所示:

import UIKit

class DetailViewController:UIViewController,UIPickerViewDataSource,UIPickerViewDelegate

{

override func viewDidLoad()

{

self.view!.backgroundColor=UIColor.whiteColor()

if self.title == "UITextView"

{

var textView=UITextView(frame:CGRectMake(10.0, 120.0, 300.0, 200.0))

textView.backgroundColor =

UIColor.lightGrayColor()

textView.editable = false

textView.font =

UIFont.systemFontOfSize(20)

textView.text = "Swift is an innovative

new programming language for Cocoa and Cocoa Touch.

Writing code is interactive and fun, the syntax is

concise yet expressive, and apps run lightning-fast.

Swift is ready for your next iOS and OS X project

— or for addition into your current app — because

Swift code works side-by-side with Objective-C."

self.view.addSubview(textView)

}

else

{}

}

到此为止,整个实例介绍完毕。单击UI主界面中“UITextView”列表项后的执行效果如图7-15所示。

图7-15 单击UI主界面中“UITextView”列表项后的界面