2015-04-02 114 views
0

我試圖製作類似於具有4個textField的鎖定屏幕的登錄屏幕。 我面臨的問題是將焦點從一個文本字段更改爲下一個。製作類似於鎖定屏幕的登錄屏幕

  • 當我說secondTextField.becomeFirstResponder()的firstTextField的值被複制到secondTextField
  • 我使用的是十進制墊 - 鍵盤類型

這是我到目前爲止,我做無法找到解決辦法來解決這個問題:

  • 使用UITextFieldDelegate
  • IBOutlet中取得連接對所有文本字段
  • firstText.delegate = self secondText.delegate = self thirdText.delegate = self firstText.becomeFirstResponder()
  • FUNC文本字段(文本框:的UITextField,shouldChangeCharactersInRange範圍:NSRange,replacementString字符串:字符串) - >布爾{ 變種newLength = countElements(的TextField.text)+ countElements(字符串) - 範圍。長度

    if newLength == 1 { 
         if textField == firstText{ 
          changeFocus(textField) 
         }else if textField == secondText { 
          changeFocus(textField) 
         }else if textField == thirdText { 
          changeFocus(textField) 
         } 
    
        } 
    return newLength <= 1 
    

    }

    FUNC changeFocus(的nextfocus:的UITextField){

    if nextFocus == firstText { 
        firstText.resignFirstResponder() 
        secondText.becomeFirstResponder() 
    } else if nextFocus == secondText { 
        secondText.resignFirstResponder() 
        thirdText.becomeFirstResponder() 
    } else if nextFocus == thirdText { 
        thirdText.resignFirstResponder() 
    } 
    

    }

我怎樣才能做到這一點正確,任何幫助和建議,請。

+0

使用此https://github.com/kylef/BSKeyboardControls – Kalpesh 2015-04-02 06:30:13

+0

如果我可以在沒有圖書館的情況下做到這一點,那將會很棒。 – 2015-04-02 06:33:16

回答

0

我發現類似的東西在這裏:similar

得到它的工作,有兩個限制:

  • 首先,我不能向後刪除
  • 其次,用戶必須點擊第一個文本框如果passCode錯誤。 但現在這些已經夠好了。
  • 這裏是方法

    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    
    var shouldProcess = false 
    var moveToNextTextField = false 
    var insertStringLength = countElements(string) 
    if insertStringLength == 0 { 
        shouldProcess = true 
    } 
    else { 
        if countElements(textField.text) == 0 { 
         shouldProcess = true 
        } 
    } 
    if shouldProcess { 
        var myString = textField.text 
        if countElements(myString) == 0{ 
         myString = myString + string 
    
         password = password + myString 
         moveToNextTextField = true 
        } 
        textField.text = myString 
    
        if moveToNextTextField { 
         changeFocus(textField) 
        } 
    } 
    return false 
    } 
    
  • 方法來改變焦點:

    func changeFocus(nextTextField : UITextField){ 
    if nextTextField == firstText { 
        firstText.resignFirstResponder() 
        secondText.becomeFirstResponder() 
    } else if nextTextField == secondText { 
        secondText.resignFirstResponder() 
        thirdText.becomeFirstResponder() 
    } else if nextTextField == thirdText { 
        thirdText.resignFirstResponder() 
        fourthText.becomeFirstResponder() 
    } else if nextTextField == fourthText { 
        fourthText.resignFirstResponder() 
    } 
    

    }

  • 方法來檢查管腳/密碼:

    func textFieldShouldEndEditing(textField: UITextField) -> Bool { 
    if textField == fourthText { 
        thirdText.resignFirstResponder() 
        let pass = defaultUser.stringForKey(Admin) 
        println("password = \(password)") 
        if pass == password { 
    
         println("the password is correct") 
         dispatch_async(dispatch_get_main_queue()) {() -> Void in 
          self.performSegueWithIdentifier("SegueToSecond", sender: self) 
         } 
    
        } else { 
         println("wrong password") 
         thirdText.text = "" 
         secondText.text = "" 
         firstText.text = "" 
         fourthText.text = "" 
         password = "" 
         view.reloadInputViews() 
        } 
    
    } 
    
    return true 
    } 
    

希望這些幫助稍後一些。

+0

對於那些找到這個答案的人,你可以通過用'return(count(myString) - range.length')替換'shouldChangeCharactersInRange'的'return false'來處理不能刪除的問題。 1)' – user3498976 2015-07-21 18:53:52

0

使用該委託方法來改變焦點

func textFieldShouldReturn(textField: UITextField) -> Bool 
+0

十進制小面板沒有返回或完成按鈕,因此委託方法永遠不會被調用。我也嘗試過使用textFieldShouldEndEditing方法。 – 2015-04-02 06:21:52

+0

如果是這樣,然後嘗試檢查下面的鏈接:http://stackoverflow.com/questions/26031798/how-to-get-keyboard-location-in-ios-8-add-done-button-on-numberpad。你需要添加返回按鈕到你的願望要求的鍵盤 – svrushal 2015-04-02 06:32:36

+0

有沒有什麼辦法,我不必使用返回按鈕?真的想保持ui默認,所以我不必改變鍵盤。 – 2015-04-02 06:37:51

0

要添加更多一點svrushal答案:

func textFieldShouldReturn(textField: UITextField) -> Bool { 
    if textField == firstText { 
     secondText.becomeFirstResponder() 
    } 

    if textField == secondText { 
     thirdText.becomeFirstResponder() 
    } 

    if textField == thirdText { 
     fourthText.becomeFirstResponder() 
    } 

} 
+0

已經嘗試過,但委託方法永遠不會被調用,就像我說我正在使用一個小數點,所以我不確定這個方法在這裏。 – 2015-04-02 06:24:34

+0

哦,好的!對不起,我沒有注意到 – 2015-04-02 06:30:08