一、键盘显示
键盘的显示是系统的行为,当一个UITextfiel或者UITextView实例成为first responder的时候,(通过发消息给becomeFirstResponder实现)系统会调起键盘。
键盘实例对象是UIView的子类对象,当要显示键盘时,系统将键盘实例添加到一个window上。
多个window被组织成一个队列,放在[UIApplicationsharedApplication] windows]这个数据结构里。
App的window一般是唯一,在程序启动完成后就被创建出来,
这个window负责所有UI的显示。
App启动后,先创建Application,通过调用appplication:didFinishLaunchingWithOptions:创建UIWindow。并通过self.windowmakeKeyAndVisible]将这个window作为主窗口,并显示出来。
所以在App项目中,要拿到这个app的window,可以用:[UIApplication sharedApplication].keyWindow]即可。这个window也就是用来接收键盘消息的UIWindow。
二、alertView显示
alertView和键盘的情况相同,系统也是把alertView加到一个window上进行显示的。
三、navigationController
这个结构组织多个VC,每个VC中的view可以直接add到UIWindow上,也可以加到其他的view或者layer上。