精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

iOS中的鍵盤事件

移動開發 iOS
在涉及到表單輸入的界面中,我們通常需要監聽一些鍵盤事件,并根據實際需要來執行相應的操作。如,鍵盤彈起時,要讓我們的UIScrollView自動收縮,以能看到整個UIScrollView的內容。為此,在UIWindow.h中定義了如下6個通知常量,來配合鍵盤在不同時間點的事件處理:

鍵盤事件

在涉及到表單輸入的界面中,我們通常需要監聽一些鍵盤事件,并根據實際需要來執行相應的操作。如,鍵盤彈起時,要讓我們的UIScrollView自動收縮,以能看到整個UIScrollView的內容。為此,在UIWindow.h中定義了如下6個通知常量,來配合鍵盤在不同時間點的事件處理:

  1. UIKeyboardWillShowNotification // 鍵盤顯示之前 
  2. UIKeyboardDidShowNotification // 鍵盤顯示完成后 
  3. UIKeyboardWillHideNotification // 鍵盤隱藏之前 
  4. UIKeyboardDidHideNotification // 鍵盤消息之后 
  5. UIKeyboardWillChangeFrameNotification // 鍵盤大小改變之前 
  6. UIKeyboardDidChangeFrameNotification // 鍵盤大小改變之后 
  7.  
  8. 這幾個通知的object對象都是nil。而userInfo字典都包含了一些鍵盤的信息,主要是鍵盤的位置大小信息,我們可以通過使用以下的key來獲取字典中對應的值: 
  9.  
  10. // 鍵盤在動畫開始前的frame 
  11. let UIKeyboardFrameBeginUserInfoKey: String 
  12.  
  13. // 鍵盤在動畫線束后的frame 
  14. let UIKeyboardFrameEndUserInfoKey: String 
  15.  
  16. // 鍵盤的動畫曲線 
  17. let UIKeyboardAnimationCurveUserInfoKey: String 
  18.  
  19. // 鍵盤的動畫時間 
  20. let UIKeyboardAnimationDurationUserInfoKey: String 

在此,我感興趣的是鍵盤事件的調用順序和如何獲取鍵盤的大小,以適當的調整視圖的大小。

從定義的鍵盤通知的類型可以看到,實際上我們關注的是三個階段的鍵盤的事件:顯示、隱藏、大小改變。在此我們設定兩個UITextField,它們的鍵盤類型不同:一個是普通鍵盤,一個是數字鍵盤。我們監聽所有的鍵盤事件,并打印相關日志(在此就不貼代碼了),直接看結果。

1) 當我們讓textField1獲取輸入焦點時,打印的日志如下:

  1. keyboard will change 
  2. keyboard will show 
  3. keyboard did change 
  4. keyboard did show 

2) 在不隱藏鍵盤的情況下,讓textField2獲取焦點,打印的日志如下:

  1. keyboard will change 
  2. keyboard will show 
  3. keyboard did change 
  4. keyboard did show 

3) 再收起鍵盤,打印的日志如下:

  1. keyboard will change 
  2. keyboard will hide 
  3. keyboard did change 
  4. keyboard did hide 

從上面的日志可以看出,不管是鍵盤的顯示還是隱藏,都會發送大小改變的通知,而且是在show和hide的對應事件之前。而在大小不同的鍵盤之間切換時,除了發送change事件外,還會發送show事件(不發送hide事件)。

另外還有兩點需要注意的是:

如果是在兩個大小相同的鍵盤之間切換,則不會發送任何消息

如果是普通鍵盤中類似于中英文鍵盤的切換,只要大小改變了,都會發送一組或多組與上面2)相同流程的消息

了解了事件的調用順序,我們就可以根據自己的需要來決定在哪個消息處理方法中來執行操作。為此,我們需要獲取一些有用的信息。這些信息是封裝在通知的userInfo中,通過上面常量key來獲取相關的值。通常我們關心的是UIKeyboardFrameEndUserInfoKey,來獲取動畫完成后,鍵盤的frame,以此來計算我們的scroll view的高度。另外,我們可能希望scroll view高度的變化也是通過動畫來過渡的,此時UIKeyboardAnimationCurveUserInfoKey和UIKeyboardAnimationDurationUserInfoKey就有用了。

我們可以通過以下方式來獲取這些值:

  1. if let dict = notification.userInfo { 
  2.  
  3. var animationDuration: NSTimeInterval = 0 
  4. var animationCurve: UIViewAnimationCurve = .EaseInOut 
  5. var keyboardEndFrame: CGRect = CGRectZero 
  6.  
  7. dict[UIKeyboardAnimationCurveUserInfoKey]?.getValue(&animationCurve) 
  8. dict[UIKeyboardAnimationDurationUserInfoKey]?.getValue(&animationDuration) 
  9. dict[UIKeyboardFrameEndUserInfoKey]?.getValue(&keyboardEndFrame) 
  10.  
  11. ...... 

實際上,userInfo中還有另外三個值,只不過這幾個值從iOS 3.2開始就已經廢棄不用了。所以我們不用太關注。

***說下表單。一個表單界面看著比較簡單,但交互和UI總是能想出各種方法來讓它變得復雜,而且其實里面設計到的細節還是很多的。像我們金融類的App,通常都會涉及到大量的表單輸入,所以如何做好,還是需要花一番心思的。空閑時,打算總結一下,寫一篇文章。

#p#

零碎

自定義UIPickerView的行

UIPickerView的主要內容實際上并不多,主要是一個UIPickerView類和對應的UIPickerViewDelegate,UIPickerViewDataSource協議,分別表示代理和數據源。在此不細說這些,只是解答我們遇到的一個小需求。

通常,UIPickerView是可以定義多列內容的,比如年、月、日三列,這些列之間相互不干擾,可以自已滾自己的,不礙別人的事。不過,我們有這么一個需求,也是有三列,但這三列需要一起滾。嗯,這個就需要另行處理了。

  1. 在UIPickerViewDelegate中,聲明了下面這樣一個代理方法: 
  2.  
  3. - (UIView *)pickerView:(UIPickerView *)pickerView 
  4. viewForRow:(NSInteger)row 
  5. forComponent:(NSInteger)component 
  6. reusingView:(UIView *)view 

我們通過這個方法就可以來自定義行的視圖。時間不早,廢話就不多說了,直接上代碼吧:

  1. - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { 
  2.  
  3. PickerViewCell *pickerCell = (PickerViewCell *)view; 
  4.  
  5. if (!pickerCell) { 
  6.  
  7. NSInteger column = 3
  8.  
  9. pickerCell = [[PickerViewCell alloc] initWithFrame:(CGRect){CGPointZero, [UIScreen mainScreen].bounds.size.width, 45.0f} column:column]; 
  10.  
  11. [pickerCell setLabelTexts:@[...]]; 
  12.  
  13. return pickerCell; 

我們定義了一個PickerViewCell視圖,里面根據我們的傳入的column參數來等分放置column個UILabel,并通過setLabelTexts來設置每個UILabel的文本。當然,我們也可以在PickerViewCell去定義UILabel的外觀顯示。就是這么簡單。

不過,還有個需要注意的就是,雖然看上去是顯示了3列,但實際上是按1列來處理的,所以下面的實現應該是返回1:

  1. - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
  2. return 1

Constructing an object of class type ‘**’ with a metatype value must use a ‘required’ initializer.

Swift中”[AnyObject]? does not have a member named generator” 問題的處理

有個小需求,需要遍歷當前導航控制器棧的所有ViewController。UINavigationController類自身的viewControllers屬性返回的是一個[AnyObject]!數組,不過由于我的導航控制器本身有可能是nil,所以我獲取到的ViewController數組如下:

  1. var myViewControllers: [AnyObject]? = navigationController?.viewControllers 
  2.  
  3. 獲取到的myViewControllers是一個[AnyObject]?可選類型,這時如果我直接去遍歷myViewControllers,如下代碼所示 
  4.  
  5. for controller in myViewControllers { 
  6. ... 

編譯器會報錯,提示如下:

  1. [AnyObject]? does not have a member named "Generator" 

實際上,不管是[AnyObject]?還是其它的諸如[String]?類型,都會報這個錯。其原因是可選類型只是個容器,它與其所包裝的值是不同的類型,也就是說[AnyObject]是一個數組類型,但[AnyObject]?并不是數組類型。我們可以迭代一個數組,但不是迭代一個非集合類型。

在stackoverflow上有這樣一個有趣的比方,我犯懶就直接貼出來了:

To understand the difference, let me make a real life example: you buy a new TV on ebay, the package is shipped to you, the first thing you do is to check if the package (the optional) is empty (nil). Once you verify that the TV is inside, you have to unwrap it, and put the box aside. You cannot use the TV while it's in the package. Similarly, an optional is a container: it is not the value it contains, and it doesn't have the same type. It can be empty, or it can contain a valid value.

所有,這里的處理應該是:

  1. if let controllers = myViewControllers { 
  2. for controller in controllers { 
  3. ...... 
責任編輯:chenqingxiang 來源: 南峰子的技術博客
相關推薦

2010-07-29 10:33:59

Flex鍵盤事件

2019-07-18 10:32:32

focusouIOS前端

2011-05-31 09:16:15

JavaScript

2017-12-21 15:42:08

iOS傳遞機制

2010-07-29 10:27:30

Flex鍵盤事件

2009-12-30 14:36:29

Silverlight

2010-07-29 10:40:12

2012-12-24 09:06:14

iOSUnity3D

2010-01-04 17:03:27

Silverlight

2013-04-01 17:05:28

2015-02-11 17:57:36

iOS源碼年日歷

2023-10-12 22:44:16

iOS事件響應鏈

2011-07-22 13:23:56

IOS UI ScrollView

2013-07-29 04:29:29

iOS開發iOS開發學習禁用UITabBarC

2010-01-07 11:38:25

VB.NET鍵盤事件

2011-06-16 14:38:18

JavaScript事件委托

2012-01-04 10:07:56

Delphi

2021-11-11 11:24:54

JavaScript模型事件

2025-03-19 10:22:09

JavaScript編程語言開發

2024-06-28 10:19:02

委托事件C#
點贊
收藏

51CTO技術棧公眾號

日韩精品一区二区三| 古装做爰无遮挡三级聊斋艳谭| 欧美午夜黄色| 麻豆中文一区二区| 欧美成人午夜视频| 尤物网站在线观看| 亚洲成人激情社区| 亚洲女人****多毛耸耸8| 国产日韩欧美二区| 中文字幕在线观看1| 国内揄拍国内精品久久| 国产视频丨精品|在线观看| 国产美女18xxxx免费视频| 日本伦理一区二区| 中文字幕成人网| 成人资源视频网站免费| 精品视频一二三区| 黄色综合网站| 色偷偷av一区二区三区乱| 在线天堂www在线国语对白| 日本一区二区中文字幕| 黑人欧美xxxx| 高清欧美精品xxxxx| 日韩欧美小视频| 91亚洲国产成人精品一区二三 | 精品一区二区久久久| 国产综合在线视频| 懂色av懂色av粉嫩av| 免费视频国产一区| 精品福利一二区| 中文av字幕在线观看| 亚洲1234区| 精品久久久久久久久国产字幕 | 欧美视频在线不卡| 欧美视频在线播放一区| 爱看av在线入口| 亚洲女人****多毛耸耸8| 亚洲高清不卡一区| 青梅竹马是消防员在线| 成人18视频日本| 97操在线视频| 国产精选久久久| 精品一区二区三区日韩| 国产精品日韩av| 国产真人无遮挡作爱免费视频| 国产亚洲精品v| 久久人人看视频| 精品一区二区三区人妻| 你懂的国产精品| 九九精品在线播放| 人妻少妇精品一区二区三区| 91精品二区| 久久视频免费观看| 亚洲视频国产视频| 伊是香蕉大人久久| 逼特逼视频在线观看| www.久久久.com| 欧美日韩美少妇| av在线无限看| 国产精品久久久久77777丨| 色先锋资源久久综合| 免费在线观看毛片网站| 欧美momandson| 色琪琪一区二区三区亚洲区| 麻豆av免费在线| 成人网ww555视频免费看| 在线看不卡av| 想看黄色一级片| 日本一区二区三区电影免费观看| 欧美电影免费观看完整版| 中文字幕乱视频| 你懂的一区二区三区| 综合网中文字幕| 午夜激情视频在线播放| 中文字幕一区二区精品区| 欧美国产日韩中文字幕在线| 日韩精品一区二区在线播放| 久久免费高清| 国产日本欧美视频| 精品国产999久久久免费| 韩国av一区二区三区| 国产精品久久波多野结衣| 日韩偷拍自拍| 亚洲欧美综合色| 日韩一级性生活片| 我爱我色成人网| 欧美日本精品一区二区三区| 麻豆tv在线观看| 天天久久夜夜| 日韩在线激情视频| 国产亚洲精品久久777777| 亚洲尤物在线| 91香蕉亚洲精品| 无码国产伦一区二区三区视频| 国产亚洲污的网站| 男人天堂新网址| 欧美成人资源| 欧美一个色资源| 9.1成人看片免费版| 91视频精品| 97在线看免费观看视频在线观看| 91禁在线观看| 久久女同性恋中文字幕| 特级西西人体www高清大胆| 一本大道色婷婷在线| 91精品国产综合久久精品麻豆| www.久久国产| 欧美激情第8页| 国产精品美女主播在线观看纯欲| 亚洲国产成人一区二区| 中文字幕 久热精品 视频在线| 亚洲色成人www永久在线观看 | 欧美自拍偷拍一区二区| 国产精品区一区二区三区| 欧美人成在线观看| 亚洲一区导航| 亚洲一区二区精品| 中日韩精品视频在线观看| 寂寞少妇一区二区三区| 日本黄网免费一区二区精品| 高h视频在线播放| 在线综合视频播放| 久久丫精品忘忧草西安产品| 亚洲美女少妇无套啪啪呻吟| 91麻豆桃色免费看| av电影在线网| 一道本成人在线| 玖玖爱在线精品视频| 亚洲影视一区| 国产一区香蕉久久| 国产69久久| 色综合久久天天综合网| 怡红院一区二区| 国产精品magnet| 成人午夜一级二级三级| 91啦中文在线| 欧美色图在线观看| 国产激情av在线| 久久一区二区三区四区五区| 精品国产aⅴ麻豆| 91九色美女在线视频| 精品1区2区在线观看| 欧美成人三级在线观看| 国产伦精品一区二区三区免费| 在线观看欧美亚洲| 亚洲视频资源| 操人视频在线观看欧美| 国产喷水吹潮视频www| 18涩涩午夜精品.www| 成 人 黄 色 小说网站 s色| 99久久婷婷国产综合精品电影√| 国产精品久久久久久亚洲影视| 国产在线视频福利| 在线一区二区观看| 成人小视频免费看| 麻豆专区一区二区三区四区五区| 一区二区免费电影| 伊人久久大香| 欧美久久精品一级黑人c片| 国产乱淫a∨片免费视频| 亚洲欧洲日韩女同| 精品人妻一区二区三| 亚洲综合小说| aa成人免费视频| 丁香花视频在线观看| 日韩成人性视频| 日韩美一区二区| 中文字幕不卡在线观看| 色啦啦av综合| 欧美福利影院| 精品一区二区不卡| 国产精品亚洲一区二区三区在线观看 | 日本不卡视频一区二区| 欧美亚洲自拍偷拍| 日韩成人短视频| 成+人+亚洲+综合天堂| 久久9精品区-无套内射无码| jiujiure精品视频播放| 成人黄色中文字幕| 黑人玩欧美人三根一起进| 日韩精品中文字幕视频在线| 欧美一级黄视频| 自拍偷拍亚洲欧美日韩| 亚洲天堂2024| 美腿丝袜亚洲色图| 男人添女人荫蒂免费视频| 色天下一区二区三区| 国产精品国产自产拍高清av水多 | 成人午夜精品福利免费| 精品人伦一区二区三区蜜桃免费| 日本少妇xxxxx| 国产成人综合在线观看| 国产91在线视频观看| 成人三级视频| 国产一区二区免费在线观看| 8av国产精品爽爽ⅴa在线观看| 欧美激情中文字幕乱码免费| 国产日本在线| 欧美videos中文字幕| 中文字幕日本视频| 亚洲午夜免费电影| 懂色av蜜桃av| 成人99免费视频| theporn国产精品| 国产精品三上| 国内自拍中文字幕| 成人精品影院| 狠狠色噜噜狠狠狠狠色吗综合| 欧美网站免费| 欧美亚洲在线视频| 精灵使的剑舞无删减版在线观看| 亚洲性猛交xxxxwww| 亚洲精品视频网| 欧美日韩另类一区| 久草手机在线视频| 亚洲大片在线观看| 黄色片在线观看网站| 久久久噜噜噜久噜久久综合| 在线xxxxx| 国产精一品亚洲二区在线视频| 黄色免费网址大全| 国产一区二区三区久久久久久久久| 日韩精品第1页| 久久国产亚洲| 日韩精品伦理第一区| 久久91在线| 成人国产1314www色视频| 日韩免费在线电影| 国产精品白嫩美女在线观看 | 狂野欧美激情性xxxx欧美| 麻豆tv免费在线观看| 欧洲亚洲成人| 欧美日韩免费在线观看| 日本成人在线免费视频| 91久久亚洲| 精品国产三级a∨在线| 日韩在线观看| 亚洲一区三区视频在线观看| 精品一区av| 日本在线观看不卡| 国产不卡av一区二区| 久久久久久久久久久久久久久久av | 国产高潮免费视频| 天使萌一区二区三区免费观看| 免费在线观看亚洲视频| 日韩视频中文| 国产综合av在线| 日韩亚洲国产欧美| 久在线观看视频| 国产亚洲毛片在线| www.com毛片| 日韩高清在线不卡| 天天色综合天天色| 蜜臀av亚洲一区中文字幕| 久久久久久蜜桃一区二区| 麻豆一区二区在线| 欧洲在线免费视频| 岛国av在线一区| a天堂视频在线观看| 久久久久国产免费免费| 超碰97人人干| 欧美国产激情一区二区三区蜜月| 亚洲色图第四色| 中文字幕亚洲综合久久菠萝蜜| 岛国毛片在线观看| 一区2区3区在线看| 日韩av男人天堂| 色8久久人人97超碰香蕉987| 亚洲精品国产精品国自产网站按摩| 欧美日韩国产一二三| 99久久99久久久精品棕色圆| 精品噜噜噜噜久久久久久久久试看| 亚洲精品中文字幕成人片 | 国产免费av高清在线| 中文字幕综合一区| 男插女视频久久久| 国产91精品久久久久久| 美女色狠狠久久| 91系列在线播放| 欧美黑白配在线| 亚洲国产精品综合| 国产精品观看| 日韩精品无码一区二区三区免费| 日本亚洲精品| 国产**成人网毛片九色| 女同性αv亚洲女同志| 91视频.com| 91精品少妇一区二区三区蜜桃臀| 亚洲国产日韩一级| 亚洲av综合一区| 精品人在线二区三区| 第九色区av在线| 久久91精品国产91久久久| 一个人看的www视频在线免费观看| 国产在线精品播放| 日韩极品少妇| 成人性做爰片免费视频| 亚洲在线电影| 麻豆传媒在线看| 国产三级久久久| 国产精彩视频在线| 欧美日韩成人综合在线一区二区| 亚洲av成人无码久久精品老人 | 一本色道久久88亚洲综合88| 色av手机在线| 国产男人精品视频| 色婷婷av一区二区三区丝袜美腿| 国产女主播av| 奇米888四色在线精品| 免费的av网站| 一区二区三区中文字幕| 在线观看国产一区二区三区| 精品国产在天天线2019| 日本三级视频在线观看| 国产97在线视频| 日本国产精品| 女人帮男人橹视频播放| 激情久久五月天| 成人精品一二三区| 在线观看日韩毛片| 爽爽视频在线观看| 久久久久久久久久久久av| 99精品美女视频在线观看热舞| 日韩精品欧美在线| 亚洲在线观看| 亚洲观看黄色网| 午夜精品福利一区二区蜜股av| 国产美女三级无套内谢| 在线观看国产精品91| 亚洲天堂一区二区| 好看的日韩精品| 99热免费精品| 伊人网综合视频| 图片区小说区区亚洲影院| 亚洲精品免费在线观看视频| 欧美国产亚洲视频| 国产一区二区三区免费在线 | 日韩一二区视频| 免费观看日韩av| 91激情视频在线观看| 色婷婷av一区二区三区软件| 欧美日韩激情视频一区二区三区| 欧美亚州一区二区三区| 欧美调教网站| 欧美日韩黄色一级片| av电影在线观看一区| 四虎成人精品永久免费av| 欧美精品一区二区三区视频| 高h视频在线播放| 精品国产一区二区三区麻豆小说 | 国产一区二区三区不卡视频网站| 日韩人妻精品无码一区二区三区| 91色porny| 久久久蜜桃一区二区| 亚洲性猛交xxxxwww| 国产一区高清| 日韩视频在线免费播放| 国产精品一区二区在线看| 久久成人在线观看| 亚洲成人网在线| 另类专区亚洲| 一区二区视频在线播放| 国模少妇一区二区三区| 国产盗摄x88av| 欧美精品一区二区三区高清aⅴ | 粉嫩老牛aⅴ一区二区三区| 欧美老女人性开放| 国产精品网址在线| 亚洲精品va| 中文在线观看免费视频| 色综合久久综合网97色综合| 婷婷视频在线| 国产精品美女诱惑| 久久婷婷丁香| www.av成人| 亚洲国产精品嫩草影院久久| 怡红院成人在线| 永久免费在线看片视频| 不卡的电视剧免费网站有什么| 黄色在线视频网址| 久久久国产精品x99av| 成人盗摄视频| 久久久精品麻豆| 亚洲最大成人综合| 国产大片在线免费观看| 成人高清在线观看| 日韩不卡一二三区| 久久久国产精品黄毛片| 亚洲欧美国产另类| 精品国产一区二区三区性色av | 黄色激情在线播放| 色姑娘综合网| 成人中文字幕合集| 国产成人精品一区二区色戒| 欧美大片大片在线播放| 久久99精品久久久久久园产越南| 日韩a一级欧美一级| 欧美日韩国产在线| av免费在线观| 日韩精品欧美一区二区三区|