iOS鍵盤處理

場景一


在iOS開發(fā)中,我們經(jīng)常處理這樣的情況:

當(dāng)鍵盤出現(xiàn)或者消失的時候,我們需要做一些相應(yīng)的操作壳贪。比如鍵盤上面的工具條的位置變化等。

這里我們就假設(shè)有一個工具條在鍵盤的上面寝杖,我們要求當(dāng)鍵盤出現(xiàn)的時候违施,工具條的位置向上移動始終在鍵盤的上面,當(dāng)鍵盤消失的時候瑟幕,工具條向下移動到屏幕的下面磕蒲。

這時候,我們應(yīng)該怎么處理呢只盹?

思路

為了讓工具條上下移動辣往,我們就要求出鍵盤上下移動的高度值,從而知道工具條該上下移動的高度值

想獲取鍵盤的移動值殖卑,就要對鍵盤的顯示和隱藏進(jìn)行監(jiān)聽站削,我們這里可以使用通知

是不是覺得思路很清晰了,那么開始吧孵稽。

處理步驟

1许起、給鍵盤設(shè)一個通知

/**

*? 給鍵盤的frame改變添加監(jiān)聽

*? @param keyBoardWillChangeFrame: 監(jiān)聽方法

*/

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyBoardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];


2、在鍵盤的通知監(jiān)聽方法里面做需要的操作

- (void)keyboardWillChangeFrame:(NSNotification *)notification

{

// 鍵盤顯示\隱藏完畢的frame

CGRect frame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];

// 修改底部約束

self.bottomSapce.constant = XMGScreenH - frame.origin.y;

// 動畫時間

CGFloat duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];

// 動畫

[UIView animateWithDuration:duration animations:^{

[self.view layoutIfNeeded];

}];

}


上一段代碼解釋:

notification.userInfo:

?notification是指傳遞過來的通知

?userInfo是一個字典菩鲜,存儲任何和通知相關(guān)聯(lián)的可能用到的信息园细。當(dāng)一個通知的值發(fā)生改變的時候,就會將值存儲到userInfo的字典中接校。例如這里的userInfo包含通知執(zhí)行的時間珊肃,和通知結(jié)束時候鍵盤的frame等信息。

也可以改變工具條的transform實現(xiàn):


self.toolbar.transform = CGAffineTransformMakeTranslation(0, -keyboardF.size.height);


自定義鍵盤馅笙,只需要設(shè)置下面的屬性即可


@property (readwrite, retain) UIView *inputView;


最后伦乔,一定要記得在dealoc方法里釋放監(jiān)聽


- (void)dealloc

{

[[NSNotificationCenter defaultCenter] removeObserver:self];

}


場景二

有時候在同一個界面里面,可能有多個TextField輸入框董习,而點(diǎn)擊不同額輸入框烈和,我們可能希望彈出的鍵盤擁有不同的工具條,這時候我們怎么辦呢皿淋?

思路

首先我們要有那么幾種工具條招刹,可以使用xib方式(簡單,不講解了了窝趣,不知道可以發(fā)郵件給我)

然后設(shè)置不同輸入框的配件視圖(textField.inputAccessoryView = xxxTool)

設(shè)置輸入框成為第一響應(yīng)者疯暑,這樣彈出的時候就能有不同的toolBar了。

代碼實現(xiàn)

//這里不貼圖了哑舒,比較簡單

UIView *tool1 = [[[NSBundle mainBundle] loadNibNamed:@"ToolBar1" owner:nil options:nil] lastObject];

UIView *tool2 = [[[NSBundle mainBundle] loadNibNamed:@"ToolBar2" owner:nil options:nil] lastObject];

self.textField1.inputAccessoryView = tool1;

self.textField2.inputAccessoryView = tool2;

場景三

上面適用的情況是在屏幕底部只有一個輸入框的時候妇拯。有朋友問到當(dāng)一個界面有很多個輸入框,上面的輸入框點(diǎn)擊不需要向上移動,只有下面的點(diǎn)擊才需要界面上移的時候怎么辦越锈?

解決方法

我這里就給出一個解決方案仗嗦,可能不是最優(yōu),希望看到的朋友有更好的方法能夠分享給我甘凭。- 首先讓你的xxxController繼承代理

@interface xxxController()@end

?讓你希望能夠上移的輸入框XXXTextField的代理稱為控制器本身

self.XXXTextField.delegate = self;

?讓控制器監(jiān)聽鍵盤消失的通知稀拐,為的是讓鍵盤消失的時候也能在需要時調(diào)整界面的位置

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(keyBoardWillHideFrame:) name:UIKeyboardWillHideNotification object:nil];

實現(xiàn)UITextField的代理方法和鍵盤的監(jiān)聽方法

- (void)textFieldDidBeginEditing:(UITextField *)textField{

CGRect frame = self.view.frame;

//這里的50是隨便設(shè)置的

frame.origin.y -=50;

frame.size.height +=50;

self.view.frame = frame;

}

-(BOOL)textFieldShouldReturn:(UITextField *)textField{

CGRect frame = self.view.frame;

frame.origin.y +=50;

frame.size.height -=50;

self.view.frame = frame;

[textField resignFirstResponder];

return YES;

}

-(void)keyBoardWillHideFrame:(NSNotification *)notification{

if (self.view.frame.origin.y == -50) {

CGRect frame = self.view.frame;

frame.origin.y +=50;

frame.size.height -=50;

self.view.frame = frame;

}}


常用知識點(diǎn):

成為第一響應(yīng)者(可以調(diào)出鍵盤)

- (BOOL)becomeFirstResponder;

取消第一響應(yīng)者

- (BOOL)resignFirstResponder;

全部取消第一響應(yīng)者

- (BOOL)endEditing:(BOOL)force;? ? //使用這個使得view或者其所有的子視圖都取消第一響應(yīng)者 (optionally force)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市丹弱,隨后出現(xiàn)的幾起案子德撬,更是在濱河造成了極大的恐慌,老刑警劉巖躲胳,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件砰逻,死亡現(xiàn)場離奇詭異,居然都是意外死亡泛鸟,警方通過查閱死者的電腦和手機(jī)蝠咆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來北滥,“玉大人刚操,你說我怎么就攤上這事≡儆螅” “怎么了菊霜?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長济赎。 經(jīng)常有香客問我鉴逞,道長,這世上最難降的妖魔是什么司训? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任构捡,我火速辦了婚禮,結(jié)果婚禮上壳猜,老公的妹妹穿的比我還像新娘勾徽。我一直安慰自己,他們只是感情好统扳,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布喘帚。 她就那樣靜靜地躺著,像睡著了一般咒钟。 火紅的嫁衣襯著肌膚如雪吹由。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天朱嘴,我揣著相機(jī)與錄音倾鲫,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛级乍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播帚湘,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼玫荣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了大诸?” 一聲冷哼從身側(cè)響起捅厂,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎资柔,沒想到半個月后焙贷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贿堰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年辙芍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羹与。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡故硅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纵搁,到底是詐尸還是另有隱情吃衅,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布腾誉,位于F島的核電站徘层,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏利职。R本人自食惡果不足惜趣效,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猪贪。 院中可真熱鬧英支,春花似錦、人聲如沸哮伟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽楞黄。三九已至池凄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鬼廓,已是汗流浹背肿仑。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尤慰。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓馏锡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親伟端。 傳聞我的和親對象是個殘疾皇子杯道,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1、點(diǎn)擊控制器的view退出鍵盤 2. 評論工具欄隨鍵盤高度上升而上升责蝠,隨鍵盤消失而回原底部位置 1. 分析界面:...
    iOS_成才錄閱讀 1,551評論 3 9
  • 這篇文章會對 IQKeyboardManager 自動解決鍵盤遮擋問題的方法進(jìn)行分析党巾。 最近在項目中使用了 IQK...
    MissLu16閱讀 2,480評論 0 4
  • 觀棋一語閱讀 170評論 0 0
  • 淚,是情人心中霜医,詩人筆下多么纏綿的字眼齿拂,高興時,悲傷時肴敛,氣憤時署海,感激時,淚都會不由自主的流出医男。如果說眼睛是心靈的窗...
    就現(xiàn)在1閱讀 269評論 0 0
  • 讀萬卷書不如行萬里路叹侄。 任何學(xué)習(xí)都離不開實踐,哪怕剛開始就像個白癡一樣昨登,但是一直學(xué)趾代,總會熟能生巧,如果你更認(rèn)真...
    鳳以非閱讀 327評論 0 4