IOS 實現鍵盤彈出視圖上移功能

來源:互聯網
上載者:User

實現隨著鍵盤彈出,響應的視圖也隨之上移

有時候你可能會遇到這樣一個情況,如




這樣彈出來的鍵盤就遮擋住了文字框,導致看不到文字框,也就看不到輸入了什麼
解決這個問題有兩種方法


一、把文字框調高點,這樣鍵盤就不會遮擋文字框了,但是有時候布局不允許這麼做,
那麼顯而易見這種方法也就不太可取了,

二、當鍵盤要彈出的時候把整個視圖往上移動,這樣文字框也就隨著往上移動。
顯然這種方法更可取,下面我們就來實現這個方法

我們通過一個仿射變換來實現 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


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.