UITextField通常用於外部文字輸入,就是常見的輸入框.如下用代碼詳細說明UITextField的各種屬性和方法
- (void)viewDidLoad
{
[super viewDidLoad];
//文本輸入框 UITextField
UITextField *textField = [[UITextField alloc] init];
//設置
textField.frame = CGRectMake(50, 50, 200, 200);
//設置輸入框中的文本 默認為空
textField.text = nil;
//設置輸入框中的屬性字符串,默認為空 如果不理解屬性字符串,可以跳過
textField.attributedText = nil;
//設置默認的屬性字符串
textField.defaultTextAttributes = nil;
//設置默認顯示的屬性字符串
textField.attributedPlaceholder = nil;
//設置輸入框的文本顏色,默認為空,可不設置,因為系統設置為黑色
textField.textColor = [UIColor blackColor];
//設置背景顏色
textField.backgroundColor = [UIColor greenColor];
//設置輸入框的字體,默認為空,可不設置,系統默認設置12pt
textField.font = [UIFont systemFontOfSize:18.0];
//設置背景圖片 只有當設置外框類型為UITextBorderStyleNone時才有效
//textField.background = [UIImage imageNamed:@"1.png"];
//textField.disabledBackground = [UIImage imageNamed:@"2.png"];
//設置輸入框變為密碼框 每輸入一個字符就變成點
textField.secureTextEntry = NO;
/*
typedef NS_ENUM(NSInteger, NSTextAlignment)
{
NSTextAlignmentLeft = 0, // 左對齊
#if iphone
NSTextAlignmentCenter = 1, // 居中
NSTextAlignmentRight = 2, // 右對齊
#else ipad
NSTextAlignmentRight = 1, // Visually right aligned
NSTextAlignmentCenter = 2, // Visually centered
#endif 其他
NSTextAlignmentJustified = 3, // 和段落對齊
NSTextAlignmentNatural = 4, // 默認狀態 正常情況下
} NS_ENUM_AVAILABLE_IOS(6_0);
*/
//設置輸入框的文字顯示模式
textField.textAlignment = NSTextAlignmentNatural;
//設置默認顯示的文字 70%透明度
textField.placeholder = @"請輸入文字";
/*
typedef NS_ENUM(NSInteger, UITextBorderStyle) {
UITextBorderStyleNone, //無邊框
UITextBorderStyleLine, //方角矩形 實線
UITextBorderStyleBezel, //方角矩形 實線
UITextBorderStyleRoundedRect //圓角矩形 帶有透明度的線條
};*/
//設置外框類型
textField.borderStyle = UITextBorderStyleNone;
//設置輸入框字體最小值
textField.minimumFontSize = 18.0;
//設置為YES時文本會自動縮小以適應文本窗口大小,默認是保持原來大小,而讓長文本滾動
textField.adjustsFontSizeToFitWidth = NO;
/*
ypedef NS_ENUM(NSInteger, UIKeyboardType) {
UIKeyboardTypeDefault, // 默認狀態,支持所有字符
UIKeyboardTypeASCIICapable, // 可以輸入ASCII碼
UIKeyboardTypeNumbersAndPunctuation, // 數字和標點符號
UIKeyboardTypeURL, // 字母和url(com)
UIKeyboardTypeNumberPad, // 數字鍵盤
UIKeyboardTypePhonePad, // 數字帶+*# 電話鍵盤
UIKeyboardTypeNamePhonePad, // 電話鍵盤支持輸入人名
UIKeyboardTypeEmailAddress, // 字母帶@. 輸入電子郵件
UIKeyboardTypeDecimalPad NS_ENUM_AVAILABLE_IOS(4_1), // 數字鍵盤帶.
UIKeyboardTypeTwitter NS_ENUM_AVAILABLE_IOS(5_0), // 字母帶@#
UIKeyboardTypeWebSearch NS_ENUM_AVAILABLE_IOS(7_0), // 字母帶 前往 按鈕
UIKeyboardTypeAlphabet = UIKeyboardTypeASCIICapable, // 可以輸入ASCII碼 首字母大寫
};
*/
//設置鍵盤的樣式
textField.keyboardType = UIKeyboardTypeURL;
//當再次編輯輸入框時 輸入框的內容就會被清空
textField.clearsOnBeginEditing = NO;
//首字母是否大寫
/*
typedef NS_ENUM(NSInteger, UITextAutocapitalizationType) {
UITextAutocapitalizationTypeNone, //全部小寫
UITextAutocapitalizationTypeWords, //每個單詞(中間有空格)的首字母大寫
UITextAutocapitalizationTypeSentences, //第一個單詞的首字母大寫
UITextAutocapitalizationTypeAllCharacters, //全部大寫
};
*/
textField.autocapitalizationType = UITextAutocapitalizationTypeNone;
/*
輸入框中是否有個叉號,在什麼時候顯示,用於一次性刪除輸入框中的內
typedef NS_ENUM(NSInteger, UITextFieldViewMode) {
UITextFieldViewModeNever, //默認顯示沒有
UITextFieldViewModeWhileEditing, //輸入時顯示有叉號
UITextFieldViewModeUnlessEditing, //不輸入時顯示有叉號
UITextFieldViewModeAlways //一直顯示有叉號,
};
*/
textField.clearButtonMode = UITextFieldViewModeWhileEditing ;
/*
typedef enum {
UITextAutocorrectionTypeDefault, 默認
UITextAutocorrectionTypeNo, 不自動糾錯
UITextAutocorrectionTypeYes, 自動糾錯
} UITextAutocorrectionType;
*/
//是否糾錯
textField.autocorrectionType = UITextAutocorrectionTypeNo;
/*
typedef NS_ENUM(NSInteger, UIReturnKeyType) {
UIReturnKeyDefault, //return鍵顯示默認狀態 return
UIReturnKeyGo, //return鍵顯示Go
UIReturnKeyGoogle, //return鍵顯示Search
UIReturnKeyJoin, //return鍵顯示Join 加入
UIReturnKeyNext, //return鍵顯示next 下一個
UIReturnKeyRoute, //return鍵顯示Route
UIReturnKeySearch, //return鍵顯示Search 搜索
UIReturnKeySend, //return鍵顯示Send 發送
UIReturnKeyYahoo, //return鍵顯示Search
UIReturnKeyDone, //return建顯示Done
UIReturnKeyEmergencyCall,
};
*/
//設置return鍵的類型
textField.returnKeyType = UIReturnKeyDefault;
/*
typedef NS_ENUM(NSInteger, UIKeyboardAppearance) {
UIKeyboardAppearanceDefault, //默認外觀 淺灰色
UIKeyboardAppearanceDark //深灰 石墨色
UIKeyboardAppearanceLight //淺灰色
UIKeyboardAppearanceAlert = UIKeyboardAppearanceDark, // 深灰 石墨色
};
*/
//設置鍵盤的外觀
textField.keyboardAppearance = UIKeyboardAppearanceDefault;
//設置輸入文字之間位置的view
UIImageView *image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"1"]];
image.bounds = CGRectMake(0, 0, 10, 10);
textField.leftView = image;
//顯示狀態和 叉號 顯示狀態類似
textField.leftViewMode = UITextFieldViewModeAlways;
//設置輸入框內部右側位置的view
UIImageView *image1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"2"]];
image1.bounds = CGRectMake(0, 0, 10, 10);
textField.rightView = image1;
//顯示狀態和 叉號 顯示狀態類似
textField.rightViewMode = UITextFieldViewModeAlways;
textField.delegate = self;
[self.view addSubview:textField];
}
/*
重寫繪制的各種方法
//重寫來重置邊緣區域
- (CGRect)borderRectForBounds:(CGRect)bounds;
//重寫來重置文字區域
- (CGRect)textRectForBounds:(CGRect)bounds;
//重寫來重置占位符區域 也就是默認顯示的區域
- (CGRect)placeholderRectForBounds:(CGRect)bounds;
//重寫來重置編輯區域
- (CGRect)editingRectForBounds:(CGRect)bounds;
//重寫來重置clearButton位置,改變size可能導致button的圖片失真
- (CGRect)clearButtonRectForBounds:(CGRect)bounds;
//重寫來重置左邊view區域
- (CGRect)leftViewRectForBounds:(CGRect)bounds;
//重寫來重置右邊view區域
- (CGRect)rightViewRectForBounds:(CGRect)bounds;
//重寫繪制改變文字屬性,重寫時調用super可以按默認圖形屬性繪制,若自己完全重寫繪制函數,就不用調用super
- (void)drawTextInRect:(CGRect)rect;
//重寫繪制改變占位符屬性,重寫時調用super可以按默認圖形屬性繪制,若自己完全重寫繪制函數,就不用調用super
- (void)drawPlaceholderInRect:(CGRect)rect;
*/
#pragma mark - UITextFieldDelegate
//設置輸入框,是否可以被修改
// NO將無法修改,不出現鍵盤
// YES可以修改,默認值
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
return YES;
}
//開始編輯時獲得焦點時,執行該方法
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
}
/*
返回BOOL值,指定是否允許文本字段接觸,當編輯結束,文本字段會讓出first responder
要想再用戶結束編輯時阻止文本字段消失,可以返回NO
這對一些文本字段必須始終保持活躍狀態的程序很有用,比如即使消息
*/
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
return NO;
}
//文本框結束編輯以後會調用
- (void)textFieldDidEndEditing:(UITextField *)textField
{
}
/*
當用戶使用自動更正功能,把輸入的文字修改為推薦的文字時,就會調用這個方法
這對於想要加入撤銷選項的應用程序特別有用
可以跟蹤字段內所做的最後一次修改,也可以對所有編輯做日志記錄,用做審計用途
要防止文字被改變可以返回NO
這個方法的參數中又一個NSRange對象,指明了被改變文字的位置,建議修改的文本也再其中
*/
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
return YES;
}
//返回一個BOOL值指明是否允許根據用戶請求清除內容
//可以設置在特定條件下才允許清除內容
- (BOOL)textFieldShouldClear:(UITextField *)textField
{
return YES;
}
//返回一個BOOL值,指明是否允許在按下回車鍵時結束編輯
//如果允許要調用resignFirstResponder方法,會導致結束編輯,而鍵盤會被手氣
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
return YES;
}