亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

UITextField 文本字段控件 -- IOS (解決鍵盤遮

系統 2478 0

進入本文之前建議你認真讀一讀我的另一篇博文 UIControl IOS控件編程 ?這樣會起到事半功倍效果

?

為什么要看另一篇關于UIControl的文章呢?因為UITextField繼承自UIControl類,很多UIControl的屬性、方法、通知等完全適用于UITextField,而那些屬于UIControl的東西我又不會在此贅述。(主要是減輕文章的長度,以最少的文字最通俗易懂講明白一個知識點是我追求的目標。)

?

創建

    UITextField* myTextField = [[UITextField alloc]initWithFrame:CGRectMake(50, 100, 200, 50)]; 
  
?

純代碼創建View請參看我的另一片博文: 有關View的幾個基礎知識點-IOS開發 (實例)


設置委托

    myTextField.delegate = self;//委托類需要遵守UITextFieldDelegate協議  
  
?

設置屬性

UIControl屬性對UITextField完全可以用,下面的都是UITextFiels擴展的屬性:

    myTextField.textAlignment = UITextAlignmentLeft;//默認就是左對齊,這個是UITextField擴展屬性  
myTextField.borderStyle = UITextBorderStyleBezel;//默認是沒有邊框,如果使用了自定義的背景圖片邊框會被忽略掉  
myTextField.placeholder = @"請在此輸入賬號";//為空白文本字段繪制一個灰色字符串作為占位符  
myTextField.clearsOnBeginEditing = YES;//設置為YES當用點觸文本字段時,字段內容會被清除  
myTextField.adjustsFontSizeToFitWidth = YES;//設置為YES時文本會自動縮小以適應文本窗口大小。默認是保持原來大小,而讓長文本滾動  
//myTextField.background = [UIImage imageNamed:@"registBtn"];//可以接受UIImage對象,此項設置則邊框失效。  
myTextField.clearButtonMode = UITextFieldViewModeUnlessEditing;//右邊顯示的'X'清楚按鈕  
//myTextField.LeftView =  
//myTextField.leftViewMode =   
//myTextField.RightView =  
//myTextField.rightViewMode =  
  
?

這些屬性令你可以將 UIView 的派生類附著于為本字段的左方或右方。人們通常會將 UIButton 對象,比如放大鏡或者書簽按鈕附著與文本字段上。每個附著視圖都會有一個相應的模式,設置 clearButtonmode 屬性的那些值,同樣可以設置這個模式。

?

顯示

    [self.view addSubview:myTextField];  
  
?

重寫繪制行為

除了UITextField對象的風格選項,你還可以定制化UITextField對象,為他添加許多不同的重寫方法,來改變文本字段的顯示行為。這些方法都會返回一個CGRect結構,制定了文本字段每個部件的邊界范圍。如果你創見了一個自定義的UITextField類,你可以重寫這些方法,這樣就可以改變一個或多個邊界。一定不要直接調用 fan廣發;它們都是被iPhone運行庫調用的回調函數下面舉個例子:

    - (CGRect)clearButtonForBounds:(CGRect)bounds{  
    return CGRectMake(bounds.origin.x +bounds.size.width-50,   
                      bounds.origin.y+bounds.size.height-20, 16, 16);  
}  
  
?

下列方法在創建一個UITextField的子類時可以重寫:

borderRectForBounds

指定矩形邊界

textRectForBounds

? 指定顯示文本的邊界

placeholderRectForBounds

指定站位文本的邊界

editingRectForBounds

指定編輯中文本的邊界

clearButtonRectForBounds

指定顯示清除按鈕的邊界

leftViewRectForBounds

指定顯示左附著視圖的邊界

rightViewRectForBounds

指定顯示右附著視圖的邊界

?

委托方法

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{  
    //返回一個BOOL值,指定是否循序文本字段開始編輯  
    return YES;  
}  
  
    - (void)textFieldDidBeginEditing:(UITextField *)textField{
    //開始編輯時觸發,文本字段將成為first responder
}
  
    - (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
    //返回BOOL值,指定是否允許文本字段結束編輯,當編輯結束,文本字段會讓出first responder
    //要想在用戶結束編輯時阻止文本字段消失,可以返回NO
    //這對一些文本字段必須始終保持活躍狀態的程序很有用,比如即時消息
    return NO;
}
  
    - (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    //當用戶使用自動更正功能,把輸入的文字修改為推薦的文字時,就會調用這個方法。
    //這對于想要加入撤銷選項的應用程序特別有用
    //可以跟蹤字段內所做的最后一次修改,也可以對所有編輯做日志記錄,用作審計用途。   
    //要防止文字被改變可以返回NO
    //這個方法的參數中有一個NSRange對象,指明了被改變文字的位置,建議修改的文本也在其中
    return YES;
}
  
    - (BOOL)textFieldShouldClear:(UITextField *)textField{
    //返回一個BOOL值指明是否允許根據用戶請求清除內容
    //可以設置在特定條件下才允許清除內容
    return YES;
}
  
    -(BOOL)textFieldShouldReturn:(UITextField *)textField{
    //返回一個BOOL值,指明是否允許在按下回車鍵時結束編輯
    //如果允許要調用resignFirstResponder 方法,這回導致結束編輯,而鍵盤會被收起
    [textField resignFirstResponder];//查一下resign這個單詞的意思就明白這個方法了
    return YES;
}
  
?????

? 通知

UITextField 派生自 UIControl ,所以 UIControl 類中的通知系統在文本字段中也可以使用。 除了 UIControl 類的標準事件,你還可以使用下列 UITextField 類特有的事件

UITextFieldTextDidBeginEditingNotification

UITextFieldTextDidChangeNotification

UITextFieldTextDidEndEditingNotification

當文本字段退出編輯模式時觸發。通知的 object 屬性存儲了最終文本。

因為文本字段要使用鍵盤輸入文字,所以下面這些事件發生時,也會發送動作通知

UIKeyboardWillShowNotification

鍵盤顯示之前發送

UIKeyboardDidShowNotification

鍵盤顯示之后發送

UIKeyboardWillHideNotification

鍵盤隱藏之前發送

UIKeyboardDidHideNotification

鍵盤隱藏之后發送

?

打開鍵盤卷動文本字段

默認情況下打開鍵盤會遮住下面的view,帶來一點點困擾,不過這不是什么大問題,我們使用點小小的手段就可以解決。

?

首先我們要知道鍵盤的高度是固定不變的,不過在IOS 5.0 以后鍵盤的高度貌似不是216了,不過不要緊,我們調整調整就是了:

?

iPhone ipad
豎屏(portrait) 216 264
橫屏(landScape) 140 352

?

我們采取的方法就是在textField(有可能是其他控件)接收到彈出鍵盤事件時把self.view整體上移216px了(我們就以iPhone豎屏為例了)。

有關View的frame,origin,size之類的知識點不懂的請參看我的另一篇博文: 有關View的幾個基礎知識點-IOS開發 (實例)

?

首先我們要設置textField的代理,我們就設為當前控制器了。

?

    textField,delegate=self;
  
??

然后我們在當前控制器實現下面兩個委托方法:

    - (void)textFieldDidBeginEditing:(UITextField *)textField
{ //當點觸textField內部,開始編輯都會調用這個方法。textField將成為first responder 
       NSTimeInterval animationDuration = 0.30f;   ?
      CGRect frame = self.view.frame;
      frame.origin.y -=216;
      frame.size.height +=216;
      self.view.frame = frame;
       [UIView beginAnimations:@"ResizeView" context:nil];
       [UIView setAnimationDuration:animationDuration];
       self.view.frame = frame;                
       [UIView commitAnimations];                
}
  
    - (BOOL)textFieldShouldReturn:(UITextField *)textField 
{//當用戶按下ruturn,把焦點從textField移開那么鍵盤就會消失了
        NSTimeInterval animationDuration = 0.30f;
        CGRect frame = self.view.frame;? ? 
        frame.origin.y +=216;? ?   
        frame.size. height -=216;? ?
        self.view.frame = frame;
	//self.view移回原位置  
	[UIView beginAnimations:@"ResizeView" context:nil];
 	[UIView setAnimationDuration:animationDuration];
       	self.view.frame = frame;                
        [UIView commitAnimations];
        [textField resignFirstResponder];   
}       

  
?

實例:

    - (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    //創建
    UITextField *myTextField = [[UITextField alloc]initWithFrame:CGRectMake(50, 300, 200, 60)];
    
    myTextField.delegate = self;//設置委托
    
    //設置屬性
    myTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;// 垂直對齊方式,可以注視掉看看默認是什么效果
    myTextField.textAlignment = UITextAlignmentLeft;//默認就是左對齊,這個是UITextField擴展屬性
    myTextField.borderStyle = UITextBorderStyleBezel;//默認是沒有邊框,如果使用了自定義的背景圖片邊框會被忽略掉
    myTextField.placeholder = @"請在此輸入賬號";//為空白文本字段繪制一個灰色字符串作為占位符
    myTextField.clearsOnBeginEditing = YES;//設置為YES當用點觸文本字段時,字段內容會被清除
    myTextField.adjustsFontSizeToFitWidth = YES;//設置為YES時文本會自動縮小以適應文本窗口大小。默認是保持原來大小,而讓長文本滾動
    //myTextField.background = [UIImage imageNamed:@"registBtn"];//可以接受UIImage對象,此項設置則邊框失效。
    myTextField.clearButtonMode = UITextFieldViewModeUnlessEditing;//右邊顯示的'X'清楚按鈕
    
    [self.view addSubview:myTextField];//顯示
    myTextField = nil;

}

//委托方法
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
    //返回一個BOOL值,指定是否循序文本字段開始編輯
    return YES;
}
- (void)textFieldDidBeginEditing:(UITextField *)textField{
    //開始編輯時觸發,文本字段將成為first responder
    
    //鍵盤遮住了文本字段,視圖整體上移
    CGRect frame = self.view.frame;
    frame.origin.y -=120;
    frame.size.height +=120;
    self.view.frame = frame;
}
- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{
    //返回BOOL值,指定是否允許文本字段結束編輯,當編輯結束,文本字段會讓出first responder
    //要想在用戶結束編輯時阻止文本字段消失,可以返回NO
    //這對一些文本字段必須始終保持活躍狀態的程序很有用,比如即時消息
    NSLog(@"here is code: %@",textField.text);
    return YES;
}
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    //當用戶使用自動更正功能,把輸入的文字修改為推薦的文字時,就會調用這個方法。
    //這對于想要加入撤銷選項的應用程序特別有用
    //可以跟蹤字段內所做的最后一次修改,也可以對所有編輯做日志記錄,用作審計用途。   
    //要防止文字被改變可以返回NO
    //這個方法的參數中有一個NSRange對象,指明了被改變文字的位置,建議修改的文本也在其中
    
    return YES;
}
- (BOOL)textFieldShouldClear:(UITextField *)textField{
    //返回一個BOOL值指明是否允許根據用戶請求清除內容
    //可以設置在特定條件下才允許清除內容
    return YES;
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
    //之前視圖上移了  現在移回來
    CGRect frame = self.view.frame;
    frame.origin.y +=120;
    frame.size.height -=120;
    self.view.frame = frame;
    NSLog(@"textfield:%@", textField);
    //返回一個BOOL值,指明是否允許在按下回車鍵時結束編輯
    //如果允許要調用resignFirstResponder 方法,這回導致結束編輯,而鍵盤會被收起
    [textField resignFirstResponder];//查一下resign這個單詞的意思就明白這個方法了
    return YES;
}

  
?

?

來源:? http://blog.csdn.net/iukey/article/details/7301150

?

?

UITextField 的密文設定方式

?

?

通常在輸入密碼或是制作一些特殊效果時,UITextField 會使用密文來保護所輸入的文字,下列我們將使用兩種不同的方式來示范如何設定 UITextField 的密文保護。

?

?一個最簡單又直接的方式,當介面上已經拉出一個 UITextField 時,我們可以透過 Interface Builder 直接設定,點選所要的 UITextField 點選屬性標籤頁 Attributes inspector,并找到 Secure 的 CheckBox 打勾即可,如下圖。

?

?

?另一種方式,就是從程式里面直接做設定,常用在動態產生 UITextField 時,其程式碼如下。

    passwordTextField.secureTextEntry = YES;
  
?

?來源: http://furnacedigital.blogspot.com/2011/04/uitextfield.html

?

?

?

?

UITextField 文本字段控件 -- IOS (解決鍵盤遮住View及密文設定的問題)(實例)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 99久久免费观看 | 久久久久久国产精品视频 | 黄色网址中文字幕 | 99色视频在线 | 东京干手机福利视频 | 成熟的女性强烈交性视频 | 成人毛片免费视频 | 四虎影视精品永久免费 | 亚洲国产精品悠悠久久琪琪 | 一级毛片毛片毛片毛毛片 | 中文字幕在线观看免费视频 | 国产一级影院 | 97欧美在线看欧美视频免费 | 四虎在线网址 | 国产精品久久久久久永久牛牛 | 国产福利资源 | 日韩 欧美 | 26uuu色噜噜欧美在线播放 | 99re6这里只有精品视频 | 久久高清 | 一级午夜免费视频 | 午夜aaaaaaaaa视频在线 | 涩涩视频免费观看 | 自拍视频精品 | 国产成人一区二区三区视频免费蜜 | 91综合精品网站久久 | 污影院 | 香蕉久草在线 | 在线视频免费国产成人 | 久久久久亚洲精品美女 | 99尹人香蕉国产免费天天在线 | 91精品国产福利尤物免费 | 夜色资源网yese321 | 国产福利视频一区二区微拍 | 欧美综合图区亚洲综合图区 | 高清一区二区三区免费 | 一区二区三区精品国产欧美 | 亚洲免费高清 | 免费国产不卡午夜福在线观看 | 久久91综合国产91久久精品 | 免费观看精品视频999 |