實現隨著鍵盤彈出,響應的視圖也隨之上移
有時候你可能會遇到這樣一個情況,如
這樣彈出來的鍵盤就遮擋住了文字框,導致看不到文字框,也就看不到輸入了什麼
解決這個問題有兩種方法
一、把文字框調高點,這樣鍵盤就不會遮擋文字框了,但是有時候布局不允許這麼做,
那麼顯而易見這種方法也就不太可取了,
二、當鍵盤要彈出的時候把整個視圖往上移動,這樣文字框也就隨著往上移動。
顯然這種方法更可取,下面我們就來實現這個方法
我們通過一個仿射變換來實現 CGAffineTransform
對仿射變換不瞭解的可以看我寫的另一篇文章,下面是連結
http://blog.csdn.net/lc_obj/article/details/17454825
首先實現當點擊文字框要輸入內容時所調用的方法
//開始編輯文字框內容時所調用的方法,用拖拽關聯的方法,響應動作為 Editing Did Begin
- (IBAction)editBegin:(id)sender {
//建立一個線程用來延遲視圖上彈
NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(change:) object:nil];
[thread start];
//釋放建立的對象
[thread release];
}
- (void)change:(id)sender
{
//線程睡眠0.2秒以實現視圖延遲上彈
[NSThread sleepForTimeInterval:0.2];
//建立一個仿射變換,平移(0, -100)視圖上移100像素
CGAffineTransform pTransform = CGAffineTransformMakeTranslation(0, -100);
//使視圖使用這個變換
self.view.transform = pTransform;
}
這裡肯定會疑惑為什麼在- (IBAction)editBegin:(id)sender 這個方法中直接使視圖上移,
而非要再建立一個線程,然後再響應一個方法來實現。
其實剛開始的時候我就是這麼做的,但是我發現有個可以說不是BUG的BUG,
用那種方法,在一開始點擊文字框的時候,視圖就立馬往上移動,速度很快,
可能你會說這不正是我們想要的麼,是的的確是我們想要的,但是問題是,這時
鍵盤才剛彈出,也就是說在鍵盤彈出的時候視圖就已經移動完成,這時鍵盤與視圖之間就會
出現一段黑色地區,這個地區大概會存在0.1到0.2秒之間,雖然沒什麼大問題,但總感覺
畫面不是那麼和諧,所以我用睡眠線程的方法以延遲視圖的上移。
可能我解釋的不是很清楚,其實你大可以自己試一試。
下面就是處理後的
下載上篇的demo,上篇的demo就實現了這個功能。
這裡是上篇demo的連結:http://download.csdn.net/detail/u012884714/6774115
這隻是一個小功能細節的實現,在這裡分享給大家 —— LC