self.textView = [[[UITextView alloc] initWithFrame:self.view.frame] autorelease];
使用alloc申请内存,并且指定位置。这里调用了autorelease,同时在dealloc函数中调用了[textView release];看似好像有问题的。因为内存管理的一个很重要的地方就是不能对一个内存计数器为0 的地址再次释放(造成的后果就是程序crash)。这里我们应该看到函数viewDidUnload的地方,self.textView = nil;因为viewDidUnload肯定早于dealloc被调用,所以在dealloc函数中,[textView release],相当于[nil release];在Objective-C中,任何发往nil的消息都会被忽略,不会造成任何后果。
但是我这里小声嘀咕一下,我认为这样的方式不是很好,我建议大家以后写代码的时候,这样的情况不要使用autorelease,同时在viewDidUnload中加入[self.textView release];在dealloc中不需要再次release这个指针。
self.textView.textColor = [UIColor blackColor];
设置文本的颜色,这里需要关注一下UIColor这个类,这个类的用法非常简单,看一下就可以了。
self.textView.font = [UIFont fontWithName:@"Arial" size:18.0];
这里是设置字体及大小,这个也是很简单,不过有时候我们会遇到如何设置自定义字体。
self.textView.delegate = self;
设置text view的delegate为自己。所谓delegate即是text view发生一些事件的时候的回调函数而已。
self.textView.backgroundColor = [UIColor whiteColor];
设置背景颜色。
self.textView.text = @"Now is the time for all good developers to come to serve their country.\n\nNow is the time for all good developers to come to serve their country.";
设置文本
self.textView.returnKeyType = UIReturnKeyDefault;
设置软件键盘的回车键。
self.textView.keyboardType = UIKeyboardTypeDefault; // use the default type input method (entire keyboard)
设置键盘。
self.textView.scrollEnabled = YES;
设置是否滚动。
// this will cause automatic vertical resize when the table is resized
self.textView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
这个地方设置text view是否随父view一起调整大小。
// note: for UITextView, if you don't like autocompletion while typing use:
// myTextView.autocorrectionType = UITextAutocorrectionTypeNo;
这个设置是否自动更正输入内容。
[self.view addSubview: self.textView];
加载在view上。
这里需要加入一些关于view controller生命周期中几个重要函数的说明。
由init、loadView、viewDidLoad、viewDidUnload、dealloc的关系说起
viewWillAppear和viewDidDisappear这两个方法是view将要出现和消失的时候调用,
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
这里注册两个函数为系统事件的回调函数,一个事件 UIKeyboardWillShowNotification是键盘将要出现。一个事件 UIKeyboardWillHideNotification是键盘将要消失。UIKeyboardWillShowNotification键盘将要出现的事件响应函数为:
- (void)keyboardWillShow:(NSNotification *)aNotification
{
参数为事件本身,除了这个参数,还可以加入一个参数,就是在addObserver的时候的object。上面传入的是nil。
// the keyboard is showing so resize the table's height
CGRect keyboardRect = [[[aNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
取得键盘的位置。
NSTimeInterval animationDuration =
[[[aNotification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
由于键盘出现是一个动画,动画的执行需要一定的时间,这里取得这个时间直。
CGRect frame = self.view.frame;
frame.size.height -= keyboardRect.size.height;
下面开始一个动画,动画我会在另外的例子中讲解,这里只需要知道,把view的大小变大,高度增加键盘的高度。加上上面的self.textView.autoresizingMask=UIViewAutoresizingFlexibleHeight;调用就可以出现输入的时候text view在输入东西过多的时候的自动滚动。可以试验一下。
[UIView beginAnimations:@"ResizeForKeyboard" context:nil];
[UIView setAnimationDuration:animationDuration];
self.view.frame = frame;
[UIView commitAnimations];
}
关于后面键盘消失的时候的回调函数,就不再讲述。值得一提的时候,我们必须在合适的时候注销这些回调函数,这里就是view消失的时候。
其他的代码是关于导航栏的设置,会在导航例子中讲解。