一,输入框
UITextField,点击输入框,会弹出键盘,底层是基于first responder.
二,UIResponder
1,UIWindow有一个firstResponder的属性,用于指定接收除了touch事件的其他事件;
2,touch event发到用户触摸到的view
3,touch event和其他event的处理对象可以不一致,一般的view不会去获取focus
4,没有成为first responder也能接收touch事件
三,配置键盘的显示
1,可以通过设置UITextField的属性来配置键盘的显示,这点和android类似
2,可以配置键盘的属性,包括是否是数字键盘,是否有密码保护,自动纠错
四,代理
类似于java的interface
1,UITextField声明了一些代理的方法,比如点击reture键处理
2,其他对象实现了这些代理方法
3,设置其他对象为UITextField的代理
4,UITextField会发送相关的消息到它的代理
五,protocol
1,UITextField声明了协议,它的delegate实现了协议
2,声明方法
@protocol UITextFieldDelegate <NSObject> @optional - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField; - (void)textFieldDidBeginEditing:(UITextField *)textField; - (BOOL)textFieldShouldEndEditing:(UITextField *)textField; - (void)textFieldDidEndEditing:(UITextField *)textField; - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string; - (BOOL)textFieldShouldClear:(UITextField *)textField; - (BOOL)textFieldShouldReturn:(UITextField *)textField; @end
可以在代理类的头文件或者类扩展中实现
@interface BNRHypnosisViewController () <UITextFieldDelegate> @end
4,协议有@optional选项,代理类可以不完全实现这里声明的方法
5,设置UITextField类的代理
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> textField delegate = self;</span>
如何扩展类的声明方法?
六,使用Motion Effects
1,可以使用设备中的传感器,比如加速传感器,用于判断哪个方向用力,比如摇一摇等
2,UIInterpolatingMotionEffect可以实现移动的效果
七,main入口
1,入口实现方法
int main(int argc, char *argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([BNRAppDelegate class])); } }
2,Main loop 无限循环,消息监听
3,BNRAppDelegate是UIApplication的代理类,会收到application发出的方法
4,UIApplicationMain的第四个参数是string? 它是如何创建对应的对象的? 类似于java的反射?
// oc中的反射机制
正常调用 CLASSA *a = [[CLASSA alloc] init]; [a CallFunc]; // 反射调用 Class cls = NSClassFromString(@"CLASSA"); id a= [[cls alloc] init]; SEL selector = NSSelectorFromString(@"CallFunc"); [a performSelector:selector withObject:nil];
5,application:didFinishLaunchingWithOptions:.是kick-off方法