UITextField

iOS程序启动流程
main函数是程序的入口
任何一个程序,无论是基于Mac OS还是iOS,程序都是从main.m文件的main函数开始执行的。

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil,
NSStringFromClass([AppDelegate class]));
    }
}

执行UIApplicationMain函数时做了跳转,转到了AppDelete中.

UIApplicationMain在程序入口函数main函数中调用,主要实现了3个功能:
1.创建应用程序(UIApplication)实例
2.创建应用程序代理实例
3.建立事件循环(runloop: 死循环,不断检测程序运行状态,是否被触摸、晃动等

UIApplicationMain剖析

int UIApplicationMain (!
   int argc,!
   char *argv[],!
   NSString *principalClassName,!
   NSString *delegateClassName!
);!

1.principalClassName:应用程序对象的类名(UIApplication或其子类)
2.delegateClassName:应用程序delegate的类名.(任何接受了 UIApplicationDelegate的类)
UIApplicationMain根据上述两个类名创建应用程序实例、应用程序代理实例。
然后建立事件循环(runloop),检测程序的各种事件(程序开始启动,接收到触摸等等)

应用程序代理,主要检测应用程序的状态并做出相应的处理。
应用程序的状态有很多,比如: 程序启动、进入活跃状态、进到后台、内存警告、收到远程消息等等
任何接受了UIApplicationDelegate协议的对象都可以成为应用程序代理.一旦应用程序的某种状态触发,就会执行相应的代理方法

UIApplicationDelegate是一个OC的协议.里面声明了一堆方法,这些方法都与应用程序运行状态有关,它们由应用程序代理实现,UIApplication 对象负责调用。

UIApplicationDelegate:

application:didFinishLaunchingWithOptions: 
// 告诉delegate程序启动即将完成,程序准备要运行(delegate实现这个⽅法时,要创建window对象,将程序内容通过window呈现给用户)
applicationDidBecomeActive:
// 告诉delegate应用程序已经进入活跃状态(重新执行被暂停的任务)
applicationWillResignActive:
// 告诉delegate应用程序即将进入非活跃状态(暂停游戏、停⽌timer等)
applicationDidEnterBackground:
// 告诉delegate应⽤程序已经进入到了后台(存储用户数据、释放一些共享资源、停止timer等)
applicationWillEnterForeground:
// 告诉delegate应用程序即将进入前台(取消所有进入后台时暂停的任务)

delegate是iOS重要的设计模式,理解它的原理,有助于写出优质代码

点击键盘return按钮实现键盘回收的步骤:
1、将AppDelete作为UITextField的delegate
2、AppDelete.h⽂件接受UITextFieldDelegate协议
3、AppDelete.m⽂件实现textFieldShouldReturn:方法

AppDelegate.m
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
return YES; }

UITextField不应该在类内部(.m⽂件)实现textFieldShouldReturn:, 因为有时候,我们点return的时候,并不总是想回收键盘,例如:有两个输⼊框,第一个输入框输入完成之后,用户点return按钮,将光标移动到第二个输入框(即:第二个输入框称为第一响应者)
对于一个V来说,自己只负责触发事件,事件由外界实现,即 delegate。

#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (void)dealloc
{
    [_window release];
    [super dealloc];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor purpleColor];
    [self.window makeKeyAndVisible];
    [_window release];

//    API(Application Programming Interface) 应用程序编程接口
//    UITextField提供给我们用于文本显示的API包括字体颜色,对齐方式,占位符等
//    UITextField提供给我们控制输入的API包括密码模式,键盘样式,自定义键盘
//    UITextField提供给我们外观控制的API包括边框样式,清除按钮,辅助视图
    UITextField *textField= [[UITextField alloc] initWithFrame:CGRectMake(120, 180, 140, 40)];
    textField.backgroundColor = [UIColor magentaColor];
    // 用户界面文本边框样式 RoundedRect:圆角矩形 Bezel:面板 Line:边缘线
    textField.borderStyle = UITextBorderStyleRoundedRect;
    [_window addSubview:textField];
    [textField release];
//    textField.layer.borderWidth = 1;
//    textField.layer.cornerRadius = 5;


    // 设置文本
    // 显示文本的内容
    textField.text = @"天天酷跑";
    // 文本颜色
    textField.textColor = [UIColor blueColor];
    // 占位文本(这个很好用)
    // 占位文本可以改颜色吗?
    textField.placeholder = @"密室逃脱";
    // 文本的对齐方式
    textField.textAlignment = NSTextAlignmentCenter;
    // 文本字体
    textField.font = [UIFont systemFontOfSize:24];
    // 是否允许输入
//    textField.enabled = NO;  // 默认是YES;设置成NO不允许输入,不弹出键盘
    // 是否加密
//    textField.secureTextEntry = YES;  // 密码格式


    // 设置弹出不同的键盘类型(枚举值)
//    textField.keyboardType = UIKeyboardTypeNumberPad;
//    UIKeyboardTypeDefault,        // 当前类型为输入法的默认类型
    // Default type for the current input method.
//    UIKeyboardTypeASCIICapable,   // 显示一个键盘,可以输入字符的ASCII码,非ASCII键盘保持活跃
    // Displays a keyboard which can enter ASCII characters,non-ASCII keyboards remain active
//    UIKeyboardTypeNumbersAndPunctuation,  // 数字和标点符号
    // Numbers and assorted punctuation.
//    UIKeyboardTypeURL,        // 一种优化的网址输入(突出显示网址类型./.COM)
    // A type optimized for URL entry (shows . / .com prominently).
//    UIKeyboardTypeNumberPad,      // 数字键0到9,适用于输入PIN码
    // A number pad (0-9). Suitable for PIN entry.
//    UIKeyboardTypePhonePad,       // 一个手机垫(1-9,*,0,#,字母在数字下)
    // A phone pad (1-9, *, 0, #, with letters under the numbers).
//    UIKeyboardTypeNamePhonePad,   // 输入一个人姓名或电话号码的类型。
    // A type optimized for entering a person's name or phone number.
//    UIKeyboardTypeEmailAddress,   // 输入电子邮件地址的类型(突出显示符号@)。
    // A type optimized for multiple email address entry (shows space @ . prominently).
//    UIKeyboardTypeDecimalPad NS_ENUM_AVAILABLE_IOS(4_1),
    // A number pad with a decimal point. 带小数点的数字键盘。
//    UIKeyboardTypeTwitter NS_ENUM_AVAILABLE_IOS(5_0), // 对于推特文本输入的优化型(容易获得@ #)
    // A type optimized for twitter text entry (easy access to @ #)
//    UIKeyboardTypeWebSearch NS_ENUM_AVAILABLE_IOS(7_0),
    // A default keyboard type with URL-oriented addition (shows space . prominently). 一个面向链接添加的默认键盘类型(突出显示空格)
//    UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable,
    // Deprecated 弃用的


    // 点击return按钮回收键盘
    // 改变return按钮类型
    textField.returnKeyType = UIReturnKeySearch;
//    UIReturnKeyDefault,
//    UIReturnKeyGo,
//    UIReturnKeyGoogle,
//    UIReturnKeyJoin,
//    UIReturnKeyNext,
//    UIReturnKeyRoute,         // 路线
//    UIReturnKeySearch,
//    UIReturnKeySend,
//    UIReturnKeyYahoo,
//    UIReturnKeyDone,
//    UIReturnKeyEmergencyCall, // 紧急呼叫


    // 是否初始化时清空输入框内容
//    textField.clearsOnBeginEditing = NO;
    textField.clearsOnBeginEditing = YES;
    // 在其中加入一键删除功能
    textField.clearButtonMode = UITextFieldViewModeAlways;
//    UITextFieldViewModeAlways         // 总是显示清除按钮
//    UITextFieldViewModeWhileEditing   // 当编辑时
//    UITextFieldViewModeUnlessEditing  // 不在编辑时


    // 创建一个view
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 195)];
    view.backgroundColor = [UIColor cyanColor];
    // 弹出一个自定义的输入视图,默认是键盘
//    textField.inputView = view;
    // 给键盘添加一个辅助视图(在输入视图的上方),默认为无
//    textField.inputAccessoryView = view;    // 只有视图的高有影响,其他任意
    // 键盘高度大约215 键盘帮助界面高度大概有35

    // 输入框左右视图,及其显示模式,这两个视图是在输入框内部(即以textField为父视图)
    // 干嘛用的?
    textField.leftView = view;  // 始终紧贴输入框左端,且以左端中点为中心点
    textField.leftViewMode = UITextFieldViewModeAlways;

    // 给textfield设置代理人
    textField.delegate = self;

    return YES;
}

// 实现协议方法
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    NSLog(@"测试return按钮");
    // 这句话是实现回收键盘的关键
    [textField resignFirstResponder];
    return YES;
}

- (BOOL)textFieldShouldClear:(UITextField *)textField
{
    NSLog(@"测试clear按钮");
    return YES;
}

@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值