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的关系说起
init方法
-
在init方法中实例化必要的对象(遵从LazyLoad思想)
-
init方法中初始化ViewController本身
loadView方法
-
当view需要被展示而它却是nil时,viewController会调用该方法。不要直接调用该方法。
-
如果手工维护views,必须
重载重写该方法
-
如果使用IB维护views,必须不能
重载重写该方法
-
loadView和IB构建view
viewDidLoad方法
-
重载重写该方法以进一步定制view
-
在iPhone OS 3.0及之后的版本中,还应该
重载重写viewDidUnload来释放对view的任何索引
-
viewDidLoad后调用数据Model
viewDidUnload方法
-
当系统内存吃紧的时候会调用该方法(注:viewController没有被dealloc)
-
内存吃紧时,在iPhone OS 3.0之前didReceiveMemoryWarning是释放无用内存的唯一方式,但是OS 3.0及以后viewDidUnload方法是更好的方式
-
在该方法中将所有IBOutlet(无论是property还是实例变量)置为nil(系统release view时已经将其release掉了)
-
在该方法中释放其他与view有关的对象、其他在运行时创建(但非系统必须)的对象、在viewDidLoad中被创建的对象、缓存数据等
-
release对象后,将对象置为nil(IBOutlet只需要将其置为nil,系统release view时已经将其release掉了)
-
一般认为viewDidUnload是viewDidLoad的镜像,因为当view被重新请求时,viewDidLoad还会重新被执行
-
viewDidUnload中被release的对象必须是很容易被重新创建的对象(比如在viewDidLoad或其他方法中创建的对象),不要release用户数据或其他很难被重新创建的对象
dealloc方法
-
viewDidUnload和dealloc方法没有关联,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消失的时候。
其他的代码是关于导航栏的设置,会在导航例子中讲解。
相关推荐
Cisco 思科 1921 路由器 IOS c1900-universalk9-mz.SPA.158-3.M4.rar 官网下载
思科 cisco ios 镜像 c7200-advipservicesk9-mz.124-2.T.bin 文件由多位CCIE水平人员测试使用后拷贝,dy下可用.
vuforia-sdk-ios-6-5-25.zip vuforia sdk for iOS Use the Vuforia SDK to build Android, iOS, and UWP(win10+) applications for mobile devices and digital eyewear. Apps can be built with Android Studio, ...
思科 cisco ios 镜像 c7200-is-mz.124-19b.bin 文件由多位CCIE水平人员测试使用后拷贝,dy下可用.
思科 cisco ios 镜像 unzip-c7200-advsecurityk9-mz.124-11.T.bin 文件由多位CCIE水平人员测试使用后拷贝,dy下可用
Cisco 思科 1921 路由器 IOS c1900-universalk9-mz.SPA.157-3.M7.rar 官网下载
Cisco 3560 IOS c3560-ipservicesk9-tar.150-2.SE4.tar
一步一步学习iOS5编程-项目源代码
思科 cisco 镜像 ios c2600-adventerprisek9-mz.124-18.bin 文件由多位CCIE水平人员测试使用后拷贝,dy下可用
cisco 思科 3602i 瘦AP IOS ap3g2-k9w8-tar.153-3.JF12i.tar (最新)
GNS3模拟器IOS:c7200-is-mz.122-19
2008年推出 CISCO2950较新IOS映像:c2950-i6k2l2q4-mz.121-22.EA12
网易airtest for mac必备agent, iOS-Tagent 其实就是 WebDriverAgent 仔细看,会发现iOS-Tagent会比WebDriverAgent简略得多。 iOS-Tagent其实就是WDA的优化版本。 git clone ...
做交换的vtp实验用的ios。c2691-advsecurityk9-mz.124-11.T2.bin 可以网上搜索一下它的使用。
Cisco 3602i 胖固件最新版本(ap3g2-k9w7-tar.153-3.JF11).tar
思科 Aironet 3602i胖AP的 IOS。
cisco8141ios镜像文件c1841-spservicesk9-mz.124-8.bin
Cisco 1602i 胖IOS,固件版本(ap1g2-k9w7-tar.153-3.JF5).tar
c2900-universalk9-mz.SPA.155-3.M.bin。思科2911路由器IOS,2900系列都可使用。
思科2700系列胖AP IOS文件,本人亲测刷机可用。 适用2702e,2702i