原文來源於:http://blog.csdn.net/focusjava/article/details/12571973
一、textField
(一)、屬性
1.UITextField的初始化和設置
//如果出現UITextField不顯示的情況,很可能是沒設置其BorderStyletextField = [[UITextField alloc] initWithFrame:CGRectMake(120.0f, 80.0f, 150.0f, 30.0f)]; [textField setBorderStyle:UITextBorderStyleRoundedRect]; //外框類型
2、默認顯示的字
3、設置文本框爲密碼狀態textField.placeholder = @"password";
textField.secureTextEntry = YES; //密碼
textField.autocorrectionType = UITextAutocorrectionTypeNo; textField.autocapitalizationType = UITextAutocapitalizationTypeNone; textField.returnKeyType = UIReturnKeyDone; textField.clearButtonMode = UITextFieldViewModeWhileEditing; //編輯時會出現個修改X
textField.delegate = self;
(二)、實現delegate的方法
1、關閉鍵盤- (BOOL)textFieldShouldReturn:(UITextField *)textField { [self.textField resignFirstResponder]; return YES; }
(三)、可以在UITextField使用下面的方法按return鍵返回
-(IBAction) textFieldDone:(id) sender { [textFieldName resignFirstResponder]; }
鏈接TextField控件的"Did end on exit"最右側加圖片是以下代碼,UIImageView *imgv=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"right.png"]]; text.rightView=imgv; text.rightViewMode = UITextFieldViewModeAlways;
如果是在最左側加圖片就換成:text.leftView=imgv; text.leftViewMode = UITextFieldViewModeAlways;
UITextField 繼承自 UIControl,此類中有一個屬性contentVerticalAlignment 所以想讓UITextField裏面的text垂直居中可以這樣寫:text.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
文本框常用方法:
用程序刪除文本框中選中的文本[textView delete: nil];
限制文本框只能輸入數字:建立NSNumberFormatter的子類,增加這個方法,將formatter鏈接至文本框。- (BOOL) isPartialStringValid: (NSString **) partialStringPtr proposedSelectedRange: (NSRangePointer) proposedSelRangePtr originalString: (NSString *) origString originalSelectedRange: (NSRange) origSelRange errorDescription: (NSString **) error { NSCharacterSet *nonDigits; NSRange newStuff; NSString *newStuffString; nonDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; newStuff = NSMakeRange(origSelRange.location, proposedSelRangePtr->location - origSelRange.location); newStuffString = [*partialStringPtr substringWithRange: newStuff]; if ([newStuffString rangeOfCharacterFromSet: nonDigits options: NSLiteralSearch].location != NSNotFound) { *error = @"不是數字"; return (NO); } else { *error = nil; return (YES); } }
從文本框獲取十六進制數據的代碼char singleNumberString[3] = {'\0','\0','\0'}; uint32_t singleNumber = 0; uint32_t i = 0; NSMutableData *data = [NSMutableData data]; //從文本框獲取到得數據 const char *buf = [[_hexToSendTextField text] UTF8String]; //轉換爲十六進制 for(i = 0; i < strlen(buf); i+=2) { if(((i+1) < len && isxdigit(buf) && (isxdigit(buf[i+1]))) { singleNumberString[0] = buf; singleNumberString[1] = buf[i+1]; sscanf(singleNumberString, "%x", &singleNumber); [data appendBytes:(void*)(&tmp) length:1]; } else { break; } } //輸出 NSLog(@"%@", data);
點擊 UITextView 輸入文字,光標都從最初點開始- (void)textViewDidChangeSelection:(UITextView *)textView { NSRange range; range.location = 0; range.length = 0; textView.selectedRange = range; }
軟鍵盤 在登錄頁面要實現用戶名和密碼,密碼要是點點格式,引入當前頁面光標要停留在用戶名選項,軟鍵盤要彈出界面。如下圖:彈出鍵盤:[username becomeFirstResponder];
取消鍵盤:[username resignFirstResponder];
密碼保護:password.secureTextEntry=YES;
限制輸入文本的長度- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if (range.location >= MAX_LENGTH) return NO; // return NO to not change text return YES; } if (textField.text.length >= 10 && range.length == 0) return NO; return YES; - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if ([textField.text length] > MAXLENGTH) { textField.text = [textField.text substringToIndex:MAXLENGTH-1]; return NO; } return YES; }
限制文本長度或者只可以輸入數字-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ // Check for non-numeric characters NSUInteger lengthOfString = string.length; for (NSInteger loopIndex = 0; loopIndex < lengthOfString; loopIndex++) {//只允許數字輸入 unichar character = [string characterAtIndex:loopIndex]; if (character < 48) return NO; // 48 unichar for 0 if (character > 57) return NO; // 57 unichar for 9 } // Check for total length NSUInteger proposedNewLength = textField.text.length - range.length + string.length; if (proposedNewLength > 3) return NO;//限制長度 return YES; }
使用UITextFieldDelegate來隱藏鍵盤 在iPhone界面上,時常會需要當用戶輸入完內容後,隱藏鍵盤。 當然有很多方法,今天只介紹使用UITextFieldDelegate這個協議實現隱藏鍵盤。 其實很簡單, 需要三步: 1. 在你的控制器類中,加入UITextFieldDelegate這個協議 如:@interface AddItemViewController : UIViewController <UITextFieldDelegate> 2. 在使用了UITextFieldDelegate協議的控制器類的實現中,加入- (BOOL)textFieldShouldReturn:方法。- (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; }
[UITextField becomeFirstResponder]; //設置焦點
3. 將xib文件中的TextField控件的delegate變量指向到之前使用UITextFieldDelegate協議的那個控制器類,將 TextField的delegate IBOutlet變量右鍵鏈接到前面的控制器類的實例上。或者使用代碼方式,指定相關TextField的delegate變量。
- (void)viewDidLoad { [super viewDidLoad]; itemNameField.delegate = self; priceField.delegate = self; }
二、TextView
(一)、基本屬性
self.textView = [[[UITextView alloc] initWithFrame:self.view.frame] autorelease]; //初始化大小並自動釋放 self.textView.textColor= [UIColor blackColor];//設置textview裏面的字體顏色 self.textView.font= [UIFont fontWithName:@"Arial" size:18.0];//設置字體名字和字體大小 self.textView.delegate =self;//設置它的委託方法 self.textView.backgroundColor= [UIColor whiteColor];//設置它的背景顏色 self.textView.text= @"原始顯示文字";//設置它顯示的內容 self.textView.returnKeyType= UIReturnKeyDefault;//返回鍵的類型 self.textView.keyboardType = UIKeyboardTypeDefault;//鍵盤類型 self.textView.scrollEnabled = YES;//是否可以拖動 self.textView.autoresizingMask= UIViewAutoresizingFlexibleHeight;//自適應高度 [self.view addSubview: self.textView];//加入到整個頁面中
(二)、 UITextView退出鍵盤的幾種方式
(1)如果你程序是有導航條的,可以在導航條上面加多一個Done的按鈕,用來退出鍵盤,當然要先實UITextViewDelegate。
代碼如下:
-(void)textViewDidBeginEditing:(UITextView *)textView { UIBarButtonItem *done = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(leaveEditMode)] autorelease]; self.navigationItem.rightBarButtonItem = done; } -(void)textViewDidEndEditing:(UITextView *)textView { self.navigationItem.rightBarButtonItem = nil; } -(void)leaveEditMode { [self.textView resignFirstResponder]; }
(2)如果你的textview裏不用回車鍵,可以把回車鍵當做退出鍵盤的響應鍵。
代碼如下:這樣無論你是使用電腦鍵盤上的回車鍵還是使用彈出鍵盤裏的return鍵都可以達到退出鍵盤的效果。#pragma mark - UITextView Delegate Methods -(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if ([text isEqualToString:@"\n"]) { [textView resignFirstResponder]; return NO; } return YES; }
(3)還有你也可以自定義其他加載鍵盤上面用來退出,比如在彈出的鍵盤上面加一個view來放置退出鍵盤的Done按鈕。
代碼如下:
UIToolbar * topView = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 30)]; [topView setBarStyle:UIBarStyleBlack]; UIBarButtonItem * helloButton = [[UIBarButtonItem alloc]initWithTitle:@"Hello" style:UIBarButtonItemStyleBordered target:self action:nil]; UIBarButtonItem * btnSpace = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; UIBarButtonItem * doneButton = [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(dismissKeyBoard)]; NSArray * buttonsArray = [NSArray arrayWithObjects:helloButton,btnSpace,doneButton,nil]; [doneButton release]; [btnSpace release]; [helloButton release]; [topView setItems:buttonsArray]; [tvTextView setInputAccessoryView:topView]; -(IBAction)dismissKeyBoard { [tvTextView resignFirstResponder]; }
4)設置UITextView圓角問題
做法是在 #import QuartzCore/QuartzCore.h 後, 來把 UITextView 設定圓角
[textView.layer setCornerRadius:10];
(5)UITextView根據文本大小自適應高度
通過實現文本字數來確定高度,如下:
然後需要定義UITextView的numberoflines爲0,即不做行數的限制。如下:NSString * desc = @"Description it is a test font, and don't become angry for which i use to do here.Now here is a very nice party from american or not!"; CGSize size = [desc sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(240, 2000) lineBreakMode:UILineBreakModeWordWrap];
[textView setNumberOfLines:0]; [textView setFrame:CGRectMake(40, 135, 240, size.height+10)]; [textView setText:desc];
(6)UITextView自定選擇文字後的菜單 在ViewDidLoad中加入:
UIMenuItem *menuItem = [[UIMenuItem alloc]initWithTitle:@"分享到新浪微博" action:@selector(changeColor:)]; UIMenuController *menu = [UIMenuController sharedMenuController]; [menu setMenuItems:[NSArray arrayWithObject:menuItem]]; [menuItem release];
當然上面那個@selector裏面的changeColor方法還是自己寫吧,也就是說點擊了我們自定義的菜單項後會觸發的方法。
然後還得在代碼里加上一個方法:
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{ if(action == @selector(changeColor:)){ if(textView.selectedRange.length>0) return YES; } return NO; }