2017-12-19 1 views
2

저는 Swift Language를 처음 사용합니다. 나는 웹 개발에 대한 지식을 가지고 있지만 이것에 관해 당신의 도움이 필요합니다.콘센트 컬렉션 및 태그가있는 양식 등록

콘센트 컬렉션이있는 등록 페이지를 만들어야합니다. 4 개의 텍스트 필드가 있고 각 텍스트 필드에 태그가 지정되어 있습니다. beingfirstresponder()를 사용하여 하나의 텍스트 필드에서 다른 텍스트 필드로 커서를 이동 시키려고 할 때, 작동하지 않습니다. 그리고 태그를 텍스트 필드에 할당 한 것과 같은 태그를 인쇄 할 때 항상 같은 것을 인쇄하지는 않습니다.

임의 순서로 나타납니다. 여기에 코드가 있습니다.

import UIKit 

class ViewController: UIViewController,UITextFieldDelegate { 

@IBOutlet var registerTF: [UITextField]! 


@IBAction func registerTFTapped(_ sender: UITextField) { 

    let tag = sender.tag 
    print(tag) 
    for tf in registerTF 
    { 
    if tf.tag == tag 
    { 

     func textFieldShouldReturn(_ textField: UITextField) -> Bool { 

      nextTextFieldToFirstResponder(textField: textField) 

      return true; 
     } 

     func nextTextFieldToFirstResponder(textField: UITextField) { 

      if tf.tag == 0 { 

       self.becomeFirstResponder() 

      } 
      else if tf.tag == 1 { 

       self.becomeFirstResponder() 

      } 
      else if tf.tag == 2 { 

       self.becomeFirstResponder() 

      } 
      else if tf.tag == 3 { 

       self.resignFirstResponder() 

      } 

     } 

     } 
    } 
} 

//LifeCycle-Starts 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func viewWillAppear(_ animated: Bool) { 
    //# 
} 

override func viewDidAppear(_ animated: Bool) { 
    //# 
} 

override func viewWillDisappear(_ animated: Bool) { 
    //# 
} 

override func viewDidDisappear(_ animated: Bool) { 
    //# 
} 

//LifeCycle-Ends 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
} 
+0

주문에 동일한 경우 일 것이다 자기야 –

+0

일반적으로 태그를 사용하지 않을 것입니다. 일반적으로 각 필드에 개별 아울렛을 만듭니다. 당신은'self.becomeFirstResponder'를 원하지 않는다. 첫 번째 응답자가 되려면 다음 텍스트 필드가 필요합니다. – Paulw11

+0

나는 개인 콘센트를 이미 만들고 작동하고 있지만 콘센트 컬렉션으로 작업하고 싶습니다. 태그를 사용하여 다음 텍스트 필드를 얻으려면 어떻게해야합니까? – Rob

답변

0

에만 TextField의 컬렉션의 순서가 태그 내가 당신 대신 당신의 ViewController의 배열에서 첫 번째로 반응에게 NEX의 TextField를 만들 필요가 있다고 생각

import UIKit 

class ViewController: UIViewController,UITextFieldDelegate { 

    @IBOutlet var registerTF: [UITextField]! 

    func nextTag(currentTag:Int)->Int{ 

     if(currentTag < registerTF!.count - 1){ 
      return currentTag + 1 
     } 
     return -1 
    } 

    func nextTextFieldToFirstResponder(textField: UITextField) { 

     let nextTag = self.nextTag(currentTag: textField.tag) 

     if(nextTag >= 0){ 
      self.registerTF![nextTag].becomeFirstResponder() 
     }else{ 
      textField.resignFirstResponder() 
     } 
    } 

    func textFieldShouldReturn(_ textField: UITextField) -> Bool { 
     self.nextTextFieldToFirstResponder(textField: textField) 
     return true 
    } 

    //LifeCycle-Starts 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     for textField in registerTF { 
      textField.delegate = self 
     } 
    } 

    override func viewWillAppear(_ animated: Bool) { 
     //# 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     //# 
    } 

    override func viewWillDisappear(_ animated: Bool) { 
     //# 
    } 

    override func viewDidDisappear(_ animated: Bool) { 
     //# 
    } 

    //LifeCycle-Ends 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 
+0

도와 줘서 고마워,하지만이 값은 'ViewController'에 'nextTag'회원이 없습니다 – Rob

+0

메서드를 추가해야합니다. @Rob –

+0

죄송합니다, 아주 새간입니다. 나는 방법 부분을 얻지 않았다. 설명해 주시겠습니까? – Rob