2017-05-26 33 views
1

假設我的應用程序中有2個文本框。第一個Textfield是輸入電子郵件(鍵盤顯示),第二個Textfield是針腳(不需要顯示任何鍵盤)。點擊另一個UITextField後自動禁用鍵盤

當我點擊第一個文本框時,鍵盤顯示出來,接下來我按下第二個文本框(這將傳遞給另一個UI &控制器)來輸入PIN。所以它在不同的頁面上,我使用Protocol來傳遞控制器之間的值。

我已經實現了self.view.endEditing(true),如果我在UI中的任何位置按下以關閉鍵盤,此工作正常。

問題是,當我點擊第一個文本域&立即輕敲第二個,而不用點擊UI上的任何地方。第一個文本字段中的鍵盤不會自動關閉並卡在其他控制器&頁面中。

那麼如何禁用第二個textview的鍵盤。因爲我最終不需要它。

這裏有幾個代碼。

此代碼是當我編輯第二個文本字段自動目標到另一個控制器。

//Implement UITextFieldDelegate 
extension LoginViewController: UITextFieldDelegate{ 

    func textFieldDidBeginEditing(_ textField: UITextField) { 
     let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "EnterMpinViewController") as! EnterMpinViewController 
     secondViewController.pinProtocol = self 
     textField.resignFirstResponder() 
     self.navigationController?.pushViewController(secondViewController, animated: true) 

} 
+0

嘗試調用'self.view。 endEditing(true)'在任何第二個視圖控制器的視圖生命週期方法中。第二個控制器上的 – Rishab

+0

我不使用UITextfield,只是UIlabel顯示我的PIN – StevenTan

+0

'self.view.endEditing(true)'用於隱藏鍵盤。 – Rishab

回答

0

TextField具有用於自定義輸入的InputView屬性,對於此方案而言,它應該是理想的,因爲您還需要安全輸入pin。

我已經寫下面的代碼片段來展示如何使用輸入視圖。

UIKit框架包括用於定製輸入視圖和輸入 附件視圖的支持。當用戶在視圖中編輯文本或其他形式的數據時,您的應用可以將其自己的輸入視圖替換爲系統鍵盤 。例如,應用程序可以使用自定義輸入視圖從符文字母表輸入字符 。

import UIKit 

class ViewController: UIViewController { 

    var textField: UITextField? 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     textField = UITextField() 
     textField?.isSecureTextEntry = true 
     textField?.textColor = UIColor.blue 
     textField?.frame = CGRect.init(x: 10, y: 100, width: 200, height: 200) 
     view.addSubview(textField!) 

     textField?.inputView = view 
     textField?.reloadInputViews() 

     let btn1: UIButton = UIButton() 
     btn1.frame = CGRect.init(x: 10, y: 350, width: 40, height: 40) 
     btn1.setTitle("1", for: UIControlState.normal) 
     btn1.addTarget(self, action: #selector(btn1Tap), for: UIControlEvents.touchUpInside) 
     view.addSubview(btn1) 
     view.backgroundColor = UIColor.lightGray 

    } 

    func btn1Tap(btn1: UIButton) { 
     textField?.text = btn1.currentTitle; 
    } 

} 
+0

這個技巧可能是工作,但其他事情如何isSecureTextEntry = true&placeHolder – StevenTan

+0

我可以通過提供文本欺騙placeHolder並將顏色更改爲淺灰色。但是'isSecureTextEntry'如何讓文字變成****? – StevenTan

+0

好吧,我錯過了這個要求。你需要使用輸入視圖我會更新我的答案 – Saurav

0

實現的UITextField委託方法,並返回false,如果文本框是你的另一個文本框

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool { 
     if textField == yourAnotherTextFiled { 

      return false 
     } 
     return true 
    } 
0

嘗試這種方式可以幫助你

let when = DispatchTime.now() + 2 // change 2 to desired number of seconds 
    self.view.endEditing(true) 
    DispatchQueue.main.asyncAfter(deadline: when) { 
     // Your code with delay 

    let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "EnterMpinViewController") as! EnterMpinViewController 
     secondViewController.pinProtocol = self 
     self.navigationController?.pushViewController(secondViewController, animated: true) 
    } 
相關問題