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

iOS8自定義輸入法教程:如何創(chuàng)建第三方輸入法

移動(dòng)開(kāi)發(fā) iOS
iOS8帶來(lái)了很多很酷的功能,其中一個(gè)就是增加第三方輸入法作為應(yīng)用程序擴(kuò)展。我們應(yīng)當(dāng)重視這個(gè)時(shí)刻,因?yàn)閼?yīng)用程序擴(kuò)展開(kāi)辟了一個(gè)全新的應(yīng)用程序種類以及付費(fèi)操作。憑借著在應(yīng)用商店中數(shù)百萬(wàn)的應(yīng)用程序,開(kāi)發(fā)者和用戶將迎來(lái)全新的一天。

iOS8帶來(lái)了很多很酷的功能,其中一個(gè)就是增加第三方輸入法作為應(yīng)用程序擴(kuò)展。我們應(yīng)當(dāng)重視這個(gè)時(shí)刻,因?yàn)閼?yīng)用程序擴(kuò)展開(kāi)辟了一個(gè)全新的應(yīng)用程序種類以及付費(fèi)操作。憑借著在應(yīng)用商店中數(shù)百萬(wàn)的應(yīng)用程序,開(kāi)發(fā)者和用戶將迎來(lái)全新的一天。

在本帖中,我將向您展示如何為您的應(yīng)用程序創(chuàng)建一個(gè)可進(jìn)行全系統(tǒng)輸入法操作的第三方輸入法。

本教程將用Swift來(lái)完成。這是我的***個(gè)真正用Swift語(yǔ)言完成的項(xiàng)目,我對(duì)其十分喜愛(ài)。現(xiàn)在,讓我們直接研究如何創(chuàng)建一個(gè)第三方輸入法。

首先,我先向大家展示一下我們要搭建的輸入法的最終效果圖。輸入法將能夠在文本框中輸入、刪除文字以及實(shí)現(xiàn)其他基本功能。諸如上下文預(yù)測(cè)、詞典等更為高級(jí)的功能超出了本教程的范圍。

創(chuàng)建Xcode項(xiàng)目

 

打開(kāi)Xcode 6并創(chuàng)建一個(gè)新項(xiàng)目。File->New->Project

 

 

給工程命名為CustomKeyboardSample并在恰當(dāng)?shù)奈恢帽4妗_@是我們的主項(xiàng)目,但是我們還需要添加擴(kuò)展。

 

 

現(xiàn)在,讓我們往項(xiàng)目中添加一個(gè)Text Field。打開(kāi)Main.Storyboard文件然后在屏幕上的視圖控制器上拖放一個(gè)UITextField控件。

 

這是我們用來(lái)測(cè)試輸入的地方。現(xiàn)在是時(shí)候來(lái)添加擴(kuò)展了。

點(diǎn)擊File-> New -> Target,選擇在iOS/Application Extension列表中的自定義輸入法(Custom Keyboard)。給該擴(kuò)展命名為CustomKeyboard并選擇Swift編程語(yǔ)言。

添加擴(kuò)展

現(xiàn)在你應(yīng)該有一個(gè)名為CustomKeyboard的新目標(biāo)文件夾,其中有一個(gè)名為KeyboardViewController.swift文件。 Xcode中已經(jīng)為我們?cè)黾恿艘恍┏跏即a和這個(gè)鍵盤應(yīng)該可以運(yùn)行了(盡管沒(méi)有什么功能)。

 

 

現(xiàn)在,您可以嘗試運(yùn)行CustomKeyboardSample,并嘗試新的輸入法。

 

 

當(dāng)你點(diǎn)擊文本框的時(shí)候,系統(tǒng)鍵盤會(huì)顯示出來(lái)。我們可以使用底排的地球圖標(biāo)來(lái)切換輸入法,但是我們只有安裝我們的新鍵盤后,這個(gè)圖標(biāo)才會(huì)顯示出來(lái)。

 

 

轉(zhuǎn)到主屏幕(點(diǎn)擊菜單欄,Hardware->Home)。打開(kāi)設(shè)置并轉(zhuǎn)到通用->鍵盤->鍵盤。點(diǎn)擊“添加新鍵盤”,然后選擇CustomKeyboard。 打開(kāi)開(kāi)關(guān)來(lái)啟用它并同意警告信息。

 

 

點(diǎn)擊完成,您可以準(zhǔn)備好開(kāi)始了!

 

 

如果在模擬器上再次運(yùn)行該應(yīng)用程序,那么就可以切換輸入法。點(diǎn)擊地球圖標(biāo),直到你看到只有“Next Keyboard”按鈕的鍵盤。

 

 

現(xiàn)在是時(shí)候開(kāi)始添加輸入法的按鍵了。

 

 

打開(kāi)文件KeyboardViewController.h。在這個(gè)文件中,你會(huì)看到一個(gè)類KeyboardViewController繼承自UIInputViewController。這是管理視圖的鍵盤類。我們可以向包含視圖中添加按鈕,它會(huì)在鍵盤中顯示出來(lái)。

 

添加一個(gè)名為createButton的函數(shù)

 

  1. func createButtonWithTitle(title: String) -> UIButton {  
  2.     let button = UIButton.buttonWithType(.System) as UIButton  
  3.     button.frame = CGRectMake(002020)  
  4.     button.setTitle(title, forState: .Normal)  
  5.     button.sizeToFit()  
  6.     button.titleLabel.font = UIFont.systemFontOfSize(15)  
  7.     button.setTranslatesAutoresizingMaskIntoConstraints(false)  
  8.     button.backgroundColor = UIColor(white: 1.0, alpha: 1.0)  
  9.     button.setTitleColor(UIColor.darkGrayColor(), forState: .Normal)  
  10.     button.addTarget(self, action: "didTapButton:", forControlEvents: .TouchUpInside)  
  11.     return button  
  12.     }  

在上面的代碼中,我們以編程的方式來(lái)添加一個(gè)按鈕,并設(shè)置其屬性。我們可以用nib文件來(lái)實(shí)現(xiàn),但我們將不得不管理如此之多的按鈕。因此這是一個(gè)更好的選擇。

 

 

該代碼會(huì)調(diào)用一個(gè)名為didTapButton的響應(yīng)按鈕被按下的方法。現(xiàn)在讓我們添加一個(gè)方法。

 

  1. func didTapButton(sender: AnyObject?) {  
  2.     let button = sender as UIButton  
  3.     let title = button.titleForState(.Normal)  
  4.     var proxy = textDocumentProxy as UITextDocumentProxy  
  5.   
  6.     proxy.insertText(title)  
  7.     }  

在上面的方法中,我們用swift實(shí)現(xiàn)了對(duì)一個(gè)按鈕事件的處理。AnyObject類型就像是在Objective-C中的ID的對(duì)象。我們給UIButton放置了一個(gè)傳送器,然后得到該按鈕的標(biāo)題文字,這些文字是我們要在文本框中要輸入的文本文字。

 

 

要使用輸入法輸入文本,我們使用textDocumentProxy對(duì)象,并調(diào)用insertText方法。

 

 

接下來(lái)的一步是添加一個(gè)按鈕到我們的鍵盤視圖。在viewDidLoad方法下面加入兩行代碼。您可以在viewDidLoad和textDidChange方法中刪除自動(dòng)生成的代碼。

 

override func viewDidLoad() {

 

super.viewDidLoad()

 

 

let button = createButtonWithTitle("A")

 

self.view.addSubview(button)

 

}

 

增加了標(biāo)題為“A”到輸入法的按鈕。這是我們的關(guān)鍵所在。

 

 

現(xiàn)在,運(yùn)行應(yīng)用程序,然后點(diǎn)擊文本框,你應(yīng)該可以看到鍵盤的”A”鍵。 (你可能需要切換鍵盤)。

 

 

點(diǎn)擊這個(gè)按鈕,看看會(huì)發(fā)生什么......看!我們已經(jīng)有了文字A!

 

 

好吧,讓我們添加更多的按鍵,讓這個(gè)小子看起來(lái)像一個(gè)真正的輸入法。

 

 

讓我們修改我們?cè)趘iewDidLoad方法中加入的代碼。

 

 

  1. override func viewDidLoad() {  
  2.    super.viewDidLoad()  
  3.   
  4.    let buttonTitles = ["Q""W""E""R""T""Y""U""I""O""P"]  
  5.    var buttons = UIButton[]()  
  6.    var keyboardRowView = UIView(frame: CGRectMake(0032050))  
  7.   
  8.    for buttonTitle in buttonTitles{  
  9.        let button = createButtonWithTitle(buttonTitle)  
  10.        buttons.append(button)  
  11.        keyboardRowView.addSubview(button)  
  12.        }  
  13.   
  14.    self.view.addSubview(keyboardRowView)    
現(xiàn)在有了這個(gè)新的代碼,我們創(chuàng)建了一個(gè)包含按鍵標(biāo)題的數(shù)組,同時(shí)我們也創(chuàng)造了包含這些按鍵的列表。每個(gè)按鍵都被添加到一個(gè)數(shù)組和一個(gè)UIView中,這將是我們的***排鍵列。然后向主鍵盤圖中添加該視圖。 如果你運(yùn)行這個(gè)程序,你可能只看到了P鍵,因?yàn)樗械陌粹o都在同一位置。我們需要以編程方式添加一些約束,使他們能夠在一排對(duì)齊。 因此,我們將創(chuàng)建一個(gè)新的函數(shù)來(lái)創(chuàng)建約束。
  1. func addIndividualButtonConstraints(buttons: UIButton[], mainView: UIView){  
  2.     for (index, button) in enumerate(buttons) {  
  3.   
  4.     var topConstraint = NSLayoutConstraint(item: button, attribute: .Top, relatedBy: .Equal, toItem: mainView, attribute: .Top, multiplier: 1.0, constant: 1)  
  5.   
  6.     var bottomConstraint = NSLayoutConstraint(item: button, attribute: .Bottom, relatedBy: .Equal, toItem: mainView, attribute: .Bottom, multiplier: 1.0, constant: -1)  
  7.   
  8.     var rightConstraint : NSLayoutConstraint!  
  9.   
  10.     if index == buttons.count - 1 {  
  11.   
  12.         rightConstraint = NSLayoutConstraint(item: button, attribute: .Right, relatedBy: .Equal, toItem: mainView, attribute: .Right, multiplier: 1.0, constant: -1)  
  13.   
  14.     }else{  
  15.   
  16.     let nextButton = buttons[index+1]  
  17.     rightConstraint = NSLayoutConstraint(item: button, attribute: .Right, relatedBy: .Equal, toItem: nextButton, attribute: .Left, multiplier: 1.0, constant: -1)  
  18.             }  
  19.   
  20.     var leftConstraint : NSLayoutConstraint!  
  21.   
  22.     if index == 0 {  
  23.   
  24.         leftConstraint = NSLayoutConstraint(item: button, attribute: .Left, relatedBy: .Equal, toItem: mainView, attribute: .Left, multiplier: 1.0, constant: 1)  
  25.   
  26.     }else{  
  27.   
  28.         let prevtButton = buttons[index-1]  
  29.         leftConstraint = NSLayoutConstraint(item: button, attribute: .Left, relatedBy: .Equal, toItem: prevtButton, attribute: .Right, multiplier: 1.0, constant: 1)  
  30.   
  31.         let firstButton = buttons[0]  
  32.         var widthConstraint = NSLayoutConstraint(item: firstButton, attribute: .Width, relatedBy: .Equal, toItem: button, attribute: .Width, multiplier: 1.0, constant: 0)  
  33.   
  34.         mainView.addConstraint(widthConstraint)  
  35.     }  
  36.   
  37.     mainView.addConstraints([topConstraint, bottomConstraint, rightConstraint, leftConstraint])  
  38.     }  
  39. }  

這是一個(gè)很長(zhǎng)的代碼,不是嗎?有了AutoLayout,你不能真正建立起它并且你需要立即添加所有約束,否則它將不工作。上面代碼的主要工作是添加邊界為1px的約束,這些約束將添加到每個(gè)按鍵的頂部和底部。它也增加了左右兩邊邊界為1px的約束,添加到相鄰鍵的左邊和右邊(或添加到行視圖,如果它是該行中的***個(gè)或***一個(gè)鍵的話)。

 

 

如果在viewDidLoad中添加調(diào)用上面函數(shù)的功能,我們應(yīng)該可以看到新的排按鍵顯示出來(lái)。

 

現(xiàn)在,這看起來(lái)更像是一個(gè)輸入法了。接下來(lái)的步驟是添加輸入法的其他行。要做到這一點(diǎn),讓我們做一些快速重構(gòu)。創(chuàng)建并實(shí)現(xiàn)添加每行按鍵的新方法。

  1. func createRowOfButtons(buttonTitles: NSString[]) -> UIView {  
  2.   
  3.     var buttons = UIButton[]()  
  4.     var keyboardRowView = UIView(frame: CGRectMake(0032050))  
  5.   
  6.     for buttonTitle in buttonTitles{  
  7.         let button = createButtonWithTitle(buttonTitle)  
  8.         buttons.append(button)  
  9.         keyboardRowView.addSubview(button)  
  10.     }  
  11.   
  12.     addIndividualButtonConstraints(buttons, mainView: keyboardRowView)  
  13.   
  14.     return keyboardRowView  
  15. }  

我們已經(jīng)基本將viewDidLoad中的代碼提取到它自己的方法中。這種新的方法將標(biāo)題文字存放在數(shù)列中,并返回包含該行所有按鈕的視圖。現(xiàn)在,我們可以在任何一個(gè)我們想要添加的代碼中調(diào)用這段代碼。

 

 

因此,我們的新vieDidLoad方法是這樣的:

 

  1. override func viewDidLoad() {  
  2.     super.viewDidLoad()  
  3.   
  4.     let buttonTitles1 = ["Q""W""E""R""T""Y""U""I""O""P"]  
  5.     let buttonTitles2 = ["A""S""D""F""G""H""J""K""L"]  
  6.     let buttonTitles3 = ["CP""Z""X""C""V""B""N""M""BP"]  
  7.     let buttonTitles4 = ["CHG""SPACE""RETURN"]  
  8.   
  9.     var row1 = createRowOfButtons(buttonTitles1)  
  10.     var row2 = createRowOfButtons(buttonTitles2)  
  11.     var row3 = createRowOfButtons(buttonTitles3)  
  12.     var row4 = createRowOfButtons(buttonTitles4)  
  13.   
  14.     self.view.addSubview(row1)  
  15.     self.view.addSubview(row2)  
  16.     self.view.addSubview(row3)  
  17.     self.view.addSubview(row4)  
  18.   
  19. }  

在上面的代碼中,我們已經(jīng)加入4行鍵,然后加入這些按鍵,后者又被添加到主視圖中的行中。

我們現(xiàn)在可以運(yùn)行代碼,但你只能看到***一排,因?yàn)樗麄兌荚谕晃恢谩?我們需要添加一些自動(dòng)布局的約束。

  1. func addConstraintsToInputView(inputView: UIView, rowViews: UIView[]){  
  2.   
  3.     for (index, rowView) in enumerate(rowViews) {  
  4.         var rightSideConstraint = NSLayoutConstraint(item: rowView, attribute: .Right, relatedBy: .Equal, toItem: inputView, attribute: .Right, multiplier: 1.0, constant: -1)  
  5.   
  6.         var leftConstraint = NSLayoutConstraint(item: rowView, attribute: .Left, relatedBy: .Equal, toItem: inputView, attribute: .Left, multiplier: 1.0, constant: 1)  
  7.   
  8.         inputView.addConstraints([leftConstraint, rightSideConstraint])  
  9.   
  10.         var topConstraint: NSLayoutConstraint  
  11.   
  12.         if index == 0 {  
  13.             topConstraint = NSLayoutConstraint(item: rowView, attribute: .Top, relatedBy: .Equal, toItem: inputView, attribute: .Top, multiplier: 1.0, constant: 0)  
  14.   
  15.         }else{  
  16.   
  17.             let prevRow = rowViews[index-1]  
  18.             topConstraint = NSLayoutConstraint(item: rowView, attribute: .Top, relatedBy: .Equal, toItem: prevRow, attribute: .Bottom, multiplier: 1.0, constant: 0)  
  19.   
  20.             let firstRow = rowViews[0]  
  21.             var heightConstraint = NSLayoutConstraint(item: firstRow, attribute: .Height, relatedBy: .Equal, toItem: rowView, attribute: .Height, multiplier: 1.0, constant: 0)  
  22.   
  23.             inputView.addConstraint(heightConstraint)  
  24.         }  
  25.     inputView.addConstraint(topConstraint)  
  26.   
  27.     var bottomConstraint: NSLayoutConstraint  
  28.   
  29.     if index == rowViews.count - 1 {  
  30.         bottomConstraint = NSLayoutConstraint(item: rowView, attribute: .Bottom, relatedBy: .Equal, toItem: inputView, attribute: .Bottom, multiplier: 1.0, constant: 0)  
  31.   
  32.     }else{  
  33.   
  34.         let nextRow = rowViews[index+1]  
  35.         bottomConstraint = NSLayoutConstraint(item: rowView, attribute: .Bottom, relatedBy: .Equal, toItem: nextRow, attribute: .Top, multiplier: 1.0, constant: 0)  
  36.     }  
  37.   
  38.     inputView.addConstraint(bottomConstraint)  
  39.     }  
  40. }  

這種新方法做了類似的功能,我們?cè)黾恿?**的自動(dòng)布局代碼。它增加了相對(duì)于主視圖向行的左右兩邊以及下面的1px的約束和添加每一行和和它上面行之間的0px約束。

現(xiàn)在,我們需要從我們的viewDidLoad方法中調(diào)用這段代碼。

  1. override func viewDidLoad() {  
  2.     super.viewDidLoad()  
  3.   
  4.     let buttonTitles1 = ["Q""W""E""R""T""Y""U""I""O""P"]  
  5.     let buttonTitles2 = ["A""S""D""F""G""H""J""K""L"]  
  6.     let buttonTitles3 = ["CP""Z""X""C""V""B""N""M""BP"]  
  7.     let buttonTitles4 = ["CHG""SPACE""RETURN"]  
  8.   
  9.     var row1 = createRowOfButtons(buttonTitles1)  
  10.     var row2 = createRowOfButtons(buttonTitles2)  
  11.     var row3 = createRowOfButtons(buttonTitles3)  
  12.     var row4 = createRowOfButtons(buttonTitles4)  
  13.   
  14.     self.view.addSubview(row1)  
  15.     self.view.addSubview(row2)  
  16.     self.view.addSubview(row3)  
  17.     self.view.addSubview(row4)  
  18.   
  19.     row1.setTranslatesAutoresizingMaskIntoConstraints(false)  
  20.     row2.setTranslatesAutoresizingMaskIntoConstraints(false)  
  21.     row3.setTranslatesAutoresizingMaskIntoConstraints(false)  
  22.     row4.setTranslatesAutoresizingMaskIntoConstraints(false)  
  23.   
  24.     addConstraintsToInputView(self.view, rowViews: [row1, row2, row3, row4])  
  25. }  

這是我們新的viewDidLoad函數(shù)。你會(huì)看到,我們把每一行的TranslatesAutoresizingMaskIntoConstraints設(shè)為了false。這是為了確保更好的使用自動(dòng)布局的方法,而不是使用約束的布局。

 

 

現(xiàn)在,如果你運(yùn)行應(yīng)用程序,你會(huì)看到輸入法均能正常自如地布局。您可以點(diǎn)擊所有的按鈕,看看它們輸入到文本框中。

 

還有一個(gè)小問(wèn)題,非文本鍵無(wú)法正常工作(例如,退格鍵,空格鍵)。

 

 

為了解決這個(gè)問(wèn)題,我們需要改變我們的didTapButton方法來(lái)添加響應(yīng)這些鍵的正確方法。

 

  1. func didTapButton(sender: AnyObject?) {  
  2.   
  3.     let button = sender as UIButton  
  4.     let title = button.titleForState(.Normal) as String  
  5.     var proxy = textDocumentProxy as UITextDocumentProxy  
  6.   
  7.     proxy.insertText(title)  
  8.   
  9.     switch title {  
  10.     case "BP" :  
  11.         proxy.deleteBackward()  
  12.     case "RETURN" :  
  13.         proxy.insertText("\n")  
  14.     case "SPACE" :  
  15.         proxy.insertText(" ")  
  16.     case "CHG" :  
  17.         self.advanceToNextInputMode()  
  18.     default :  
  19.         proxy.insertText(title)  
  20.     }  
  21. }  

這里用switch語(yǔ)句來(lái)對(duì)按下的鍵進(jìn)行識(shí)別處理。退格鍵調(diào)用代理上的deleteBackward方法,空格鍵插入一個(gè)空格和CHG鍵改變輸入法或者系統(tǒng)輸入法或安裝下一個(gè)輸入法。

 

 

下一步是什么?

 

教程就到這里,本教程就如何創(chuàng)建一個(gè)基本的自定義鍵盤進(jìn)行了一個(gè)粗略的講解。你的作業(yè)是這個(gè)進(jìn)一步優(yōu)化,看看您是否可以添加更高級(jí)的功能,如使用Caps Lock鍵添加大寫(xiě)字母,切換到數(shù)字/符號(hào)鍵盤方案等。

 

本文鏈接:http://www.cocoachina.com/ios/20140922/9706.html

責(zé)任編輯:chenqingxiang 來(lái)源: cocoachina
相關(guān)推薦

2021-08-04 16:36:00

Windows 10Windows微軟

2014-12-29 10:05:24

iOS 8越獄插件

2021-10-15 22:17:08

Windows 10Windows微軟

2021-04-20 08:30:23

微信微信輸入法張小龍

2011-09-15 09:34:48

ubuntu輸入法

2010-01-08 16:50:51

Ubuntu SCIM

2010-01-11 10:09:14

Ubuntulinux輸入法設(shè)置

2012-02-15 11:14:21

搜狗輸入法

2010-06-08 18:50:30

OpenSUSE 輸入

2021-11-06 23:04:10

Windows 10Windows微軟

2013-01-10 11:27:58

Android輸入法分析報(bào)告

2023-09-09 07:08:37

百度輸入法AI

2010-02-07 14:25:47

Ubuntu SCIM

2009-08-31 16:29:21

C#控制輸入法

2013-09-18 10:44:01

搜狗輸入法詞語(yǔ)

2010-03-25 13:19:17

云計(jì)算

2011-04-29 11:05:57

搜狗手機(jī)輸入法

2021-11-11 23:00:50

Windows 10Windows微軟
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

青青草在线免费视频| 蜜臀99久久精品久久久久小说| 蜜桃在线一区| 精品电影在线观看| 色噜噜狠狠色综合网| 国产强被迫伦姧在线观看无码| 在线成人欧美| 最近中文字幕日韩精品| 少妇精品无码一区二区| 性欧美1819sex性高清| 最新高清无码专区| 激情欧美一区二区三区中文字幕| 波多野结衣黄色网址| 欧美freesex交免费视频| 精品香蕉在线观看视频一| 手机av在线免费| 亚洲综合电影| 亚洲激情六月丁香| 手机成人在线| 黄色一级a毛片| 日韩大片在线永久免费观看网站| 久久机这里只有精品| 久久久伊人欧美| 免费看黄色的视频| 97久久综合精品久久久综合| 在线观看三级视频欧美| 欧美视频在线观看视频| 69久久精品| 91丨国产丨九色丨pron| av免费观看久久| 艳妇乳肉豪妇荡乳av无码福利| 尤物在线精品| 欧美国产日韩一区二区| 五月婷婷综合激情网| 伊人久久综合影院| 亚洲精品成人久久电影| 日本黄色一级网站| 欧美黄色成人| 欧美午夜电影一区| 999精品网站| 一二三四视频在线中文| 一区二区三区日韩欧美| 亚洲综合首页| 成人精品一区二区三区免费 | 国模私拍视频在线| 激情综合网天天干| 国产日韩在线看片| 亚洲天堂999| 免费黄网站欧美| 国产精品老牛影院在线观看| 一级片在线观看免费| 亚洲毛片播放| 91国在线精品国内播放| 日韩 欧美 精品| 国产精品久久久免费| 韩国欧美亚洲国产| 日本一二三区视频| 99在线热播精品免费99热| 国产+人+亚洲| 99久在线精品99re8热| 亚洲国产日本| 2019精品视频| 亚洲国产成人精品女人久久| 久久综合激情| 国产精品一区=区| 波多野结衣人妻| 久久国产精品一区二区| 91久久精品美女| 成人激情四射网| www.日本不卡| 欧洲高清一区二区| 成年女人的天堂在线| 国产精品久久久99| 国产乱子伦精品视频| 国产一二三在线| 色婷婷av一区二区三区大白胸| 亚洲精品高清无码视频| 韩国理伦片久久电影网| 91精品国产欧美一区二区成人| 国产老头和老头xxxx×| 国产精品久久久久久久久久白浆| 日韩av影视综合网| 91无套直看片红桃在线观看| 天天综合精品| 久久琪琪电影院| 久久青青草原亚洲av无码麻豆 | 182午夜视频| 亚洲午夜精品| 亚洲男人第一网站| 97精品在线播放| 在线播放一区| 国产精品免费视频久久久| 国产黄a三级三级看三级| 99re热视频精品| 亚洲一区精彩视频| wwww亚洲| 欧美日韩一区视频| 久久久久久久人妻无码中文字幕爆| 伊人春色之综合网| 欧美成人精品在线播放| 人人爽人人爽人人片av| 激情综合网最新| 欧美高清视频一区二区三区在线观看 | 久久高清内射无套| 西西裸体人体做爰大胆久久久| 国产欧美精品va在线观看| 国产综合在线播放| 国产精品麻豆久久久| 国产高清av在线播放| 久久夜夜久久| 亚洲女在线观看| 久久网免费视频| 精品亚洲国内自在自线福利| 欧美精品亚洲| 丰满诱人av在线播放| 欧美少妇bbb| 人妻熟女aⅴ一区二区三区汇编| 自拍日韩欧美| 国产精品电影观看| 五月婷婷六月激情| 一区二区三区欧美| 欧美美女一级片| 视频一区欧美| 96精品视频在线| 亚洲国产一二三区| 亚洲三级电影全部在线观看高清| 熟女少妇精品一区二区| 欧美日韩导航| 国模精品系列视频| www.五月婷婷| 亚洲精选在线视频| 欧美日韩中文不卡| 成人在线免费观看网站| 日本人成精品视频在线| 午夜在线视频免费| 亚洲电影一区二区| 野花视频免费在线观看| 亚洲国产一区二区在线观看| 国产精品人成电影| 香蕉视频网站在线观看| 人人九九精品视频| 日韩理论片在线| av五月天在线| 国产成人一区二区三区影院| 91sa在线看| 色一情一乱一乱一区91av| 一区二区三区在线视频观看| 国产精品嫩草影院8vv8| 久久精品av| 国产有码一区二区| 免费的黄网站在线观看| 欧美美女黄视频| 日韩在线观看视频一区二区| 九一久久久久久| 亚洲黄色网址在线观看| 蜜桃精品一区二区三区| 欧美激情影音先锋| 黄色福利在线观看| 岛国av一区二区在线在线观看| 91av在线免费| 老牛国产精品一区的观看方式| 免费国产在线精品一区二区三区| 中文字幕资源网在线观看免费| 亚洲精品之草原avav久久| 中文在线第一页| 中国色在线观看另类| 日韩一区二区三区久久| 重囗味另类老妇506070| 国产区日韩欧美| 超碰aⅴ人人做人人爽欧美| 亚洲欧美另类人妖| 在线观看免费视频一区| 亚洲欧美日韩国产另类专区| 久久久久无码国产精品一区李宗瑞| 亚洲黄网站黄| 久久艳妇乳肉豪妇荡乳av| 影音成人av| 久久av.com| 无码国产精品96久久久久| 欧美影视一区在线| 91成人福利视频| 99久久精品99国产精品| 日本在线观看免费视频| 午夜久久一区| 欧美日韩一区在线播放| 伊人久久综合网另类网站| 欧美精品成人在线| 粉嫩一区二区三区国产精品| 91精品国产乱| 在线观看免费av片| 亚洲少妇30p| 亚洲制服丝袜在线播放| 蜜桃一区二区三区在线观看| 伊人再见免费在线观看高清版 | 日本系列第一页| 国产日韩在线不卡| 一二三区视频在线观看| 日韩精品久久理论片| 嫩草影院中文字幕| 日本精品三区| 精品国产一区二区三区久久久久久| 日本精品另类| 国内精品久久久久久久久| 又爽又大又黄a级毛片在线视频| 欧美成人vps| 中文字幕在线视频第一页| 性做久久久久久免费观看| 国产精品久久久免费看| 久久亚洲一级片| 肉丝美足丝袜一区二区三区四| 久久中文在线| 国产一线二线三线女| 日韩在线欧美| 蜜桃麻豆www久久国产精品| 香蕉大人久久国产成人av| 国产精品电影久久久久电影网| 欧洲精品二区| 久久久久北条麻妃免费看| 奇米影视888狠狠狠777不卡| 日韩视频免费直播| 亚洲资源在线播放| 色婷婷av一区二区三区gif| 国产无码精品一区二区| 亚洲欧美激情一区二区| 美国一级黄色录像| 国产亚洲欧洲997久久综合| 99久久免费看精品国产一区| 国产99一区视频免费| 亚洲午夜精品一区| 蜜桃视频在线一区| 污版视频在线观看| 日韩电影一区二区三区四区| 国产成人无码精品久久久性色| 欧美国产激情| 成人手机在线播放| 在线观看国产精品入口| 一级做a爰片久久| 91亚洲国产成人久久精品| 日本高清不卡一区二区三| 女人抽搐喷水高潮国产精品| 国产精品美女诱惑| 成人免费在线电影网| av观看久久| 国产毛片久久久| 国产在线一区二区三区播放| 9l视频自拍九色9l视频成人| www.成人三级视频| 视频一区日韩| 成人毛片网站| 成人台湾亚洲精品一区二区| 国产成人精品自拍| 国产精品白丝av嫩草影院| 国产精品永久入口久久久| 国产乱人伦丫前精品视频| 精品一区二区不卡| 少妇久久久久| 日韩一区不卡| 欧美电影一区| 日韩人妻一区二区三区蜜桃视频| 你懂的成人av| 99热亚洲精品| 麻豆久久婷婷| 色乱码一区二区三区在线| 激情图区综合网| 女同性αv亚洲女同志| av资源网一区| 香蕉视频久久久| 国产精品久久久久aaaa樱花| 全程偷拍露脸中年夫妇| 亚洲国产成人精品视频| 日本中文字幕久久| 欧美日韩国产一级片| 国内精品国产成人国产三级| 亚洲国产精品嫩草影院久久| 你懂的视频在线| 日韩在线播放一区| 福利成人导航| 国产精品video| 国产不卡精品| 国产一区二区久久久| 精品国产乱码久久久久久1区2匹| 伊人久久婷婷色综合98网| 国产一区欧美| 亚洲男人天堂色| 国产精品影视网| 亚洲国产欧美视频| 亚洲欧洲国产专区| 97超碰人人干| 欧美片在线播放| 乱色精品无码一区二区国产盗| 亚洲免费视频一区二区| 老司机在线视频二区| 91精品成人久久| 日韩色性视频| 精品无人乱码一区二区三区的优势| 色喇叭免费久久综合| 日本人体一区二区| 久久99精品国产| 野花社区视频在线观看| 中文字幕一区二区三区在线不卡| 四虎永久在线精品| 欧美日韩久久不卡| 天天操天天干天天舔| 久久精品99无色码中文字幕| 特黄毛片在线观看| 亚洲aaaaaa| 成人一区而且| 欧美私人情侣网站| 岛国一区二区三区| 免费看一级黄色| 色综合久久久久久久久久久| 性生活视频软件| 日韩中文在线观看| 欧美黑人一区| 精品一区2区三区| 欧美视频日韩| 免费网站在线观看黄| 久久久精品免费网站| 国产黄色片视频| 欧美一区二区在线看| 在线国产91| 国产精品久久中文| 奇米色欧美一区二区三区| 免费看毛片的网址| 国产乱色国产精品免费视频| 在线观看亚洲大片短视频| 色婷婷久久久亚洲一区二区三区| 高潮一区二区三区乱码| 美女扒开尿口让男人操亚洲视频网站 | 亚洲欧美另类综合偷拍| 亚洲无码久久久久| 国产一区av在线| gay欧美网站| 免费99视频| 美女被久久久| 亚洲av综合一区二区| 欧美日韩国产综合新一区| 免费a视频在线观看| 欧美精品video| youjizz欧美| 毛片在线播放视频| 成人福利视频网站| 人人干人人干人人干| 亚洲国产日韩精品在线| 成年人黄色大片在线| 国产欧美综合精品一区二区| 亚洲国产精品一区| 欧美无人区码suv| 欧美午夜电影在线| 玖玖综合伊人| 国产成人在线一区| 成人在线免费观看视频| gai在线观看免费高清| 中文字幕一区二区在线观看 | 国内不卡的二区三区中文字幕| 战狼4完整免费观看在线播放版| 欧美日韩一区二区在线观看视频| 午夜伦理在线| 成人中文字幕在线观看| 欧美在线免费一级片| 成人一区二区三区仙踪林| 亚洲自拍与偷拍| 亚洲 另类 春色 国产| 欧美又大又粗又长| 久久国产中文字幕| 原创真实夫妻啪啪av| 夜夜夜精品看看| 午夜在线观看视频18| 国产精品久久久久久亚洲影视| 欧美好骚综合网| 中文字幕乱妇无码av在线| 亚洲成a人片在线观看中文| 四虎精品在线| 国产精品美女久久久久久免费| 99久久夜色精品国产亚洲1000部| 香蕉视频色在线观看| 亚洲第一狼人社区| 国产中文在线视频| 91久久国产婷婷一区二区| 亚洲高清网站| 怡红院一区二区三区| 欧美一区二区三区在线观看| 超碰在线网站| 亚洲精品日韩在线观看| 国产v日产∨综合v精品视频| 国产嫩bbwbbw高潮| 久久天天躁狠狠躁夜夜爽蜜月| 丁香5月婷婷久久| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 中文字幕一区二区三区色视频| 亚洲男女视频在线观看| 国产成人精品网站| 欧美视频福利| 美女av免费看| 日韩成人在线视频网站| 亚洲伊人精品酒店| 国产黄色特级片| 怡红院av一区二区三区| 国产尤物视频在线| 国产精品中出一区二区三区|