2017-02-16 3 views
1

나는 결과를 표시하기 위해 취소 3 텍스트 필드, 1 개 버튼 프로젝트와 레이블이 엑스 코드 8 스위프트 3.스위프트 : 동시에

을 사용하고 두 FUNC의 텍스트 필드를 사용하는 방법. 나는 3 자리 숫자뿐만 아니라 나는 두 가지에 대한 코드를 얻으려면 관리 360의 값을 최대로 내 텍스트 필드 입력을 제한 할

class ViewController: UIViewController,UITextFieldDelegate { 

@IBOutlet weak var input1: UITextField! 
@IBOutlet weak var input2: UITextField! 
@IBOutlet weak var input3: UITextField! 
@IBOutlet weak var lblResult: UILabel! 
@IBOutlet weak var clearButton: UIButton! 

및 사용 한 경우에는 작동 : 내 수업 내부

내가 가진의 ViewController 한 번에 하나씩 만 사용할 수 있습니다. 둘 다 func로 시작하기 때문에 텍스트 필드를 함께 사용할 수는 없습니다. 다른 수업에서해야합니까? 이것이 기본적인 질문이지만 학습 과정의 일부라는 것을 알고 있습니다.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, 
       replacementString string: String) -> Bool 
{ 
    let maxLength = 3 
    let currentString: NSString = textField.text! as NSString 
    let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString 
    return newString.length <= maxLength 
} 

과 :

내가 결합하려는 두 개의 코드입니다

func textField(_ textField: UITextField, 
       shouldChangeCharactersIn range: NSRange, 
       replacementString string: String) -> Bool 
{ 
    var startString = "" 
    if (textField.text != nil) 
    { 
     startString += textField.text! 
    } 
    startString += string 
    let limitNumber = Int(startString) 
    if limitNumber! > 360 
    { 
     return false 
    } 
    else 
    { 
     return true; 
    } 
} 

그들은 클래스의 ViewController 안에 모두 있습니다.

도움 주셔서 감사합니다.

+0

이 시나리오에서는 어떤 '텍스트 필드'가 무엇인지 식별 ​​할 필요가 없다고 생각합니다. 이 함수 안에있는 모든 변수는 로컬 변수입니다. 이것들은'UITextFieldDelegate'의 함수입니다. 모든 UITextField에 대해 'self'로 설정 했습니까? – KrishnaCA

답변

1

, 여기 당신이 필요로하는 모든 것입니다 :

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, 
       replacementString string: String) -> Bool { 
    let maxLength = 3 
    let limitValue = 360 

    let text = textField.text! 
    let currentString: NSString = text as NSString 
    let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString 

   var startString = "" 

    if !text.isEmpty { 
     startString += text 
    } 
    startString += string 

    let limitNumber = Int(startString)! 

    return limitNumber < limitValue && newString.length <= maxLength 
} 

업데이트 : 다음 texfield에

자동 초점.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, 
        replacementString string: String) -> Bool { 
    let maxLength = 3 
    let limitValue = 360 

    let text = textField.text! 
    let currentString: NSString = text as NSString 
    let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString 

   var startString = "" 

    if !text.isEmpty { 
     startString += text 
    } 
    startString += string 

    let limitNumber = Int(startString)! 

    let newLength: Int = newString.length 

    if textField == input1 { 
     if newLength == maxLength { 
      input2.becomeFirstResponder() 
     } 
    } 
    if textField == input2 { 
     if newLength == maxLength { 
      input3.becomeFirstResponder() 
     } 
    } 

    if textField == input3 { 
     if newLength == maxLength { 
      self.view.endEditing(true) 
     } 
    } 

    return limitNumber < limitValue && newLength <= maxLength 
} 
+0

그것은 매력처럼 작동했습니다! 정말 고맙습니다! – FONSPA

+0

당신은 환영합니다 :) – javimuu

+0

Btw 또한 3 자리 숫자를 삽입했을 때 첫 번째 텍스트 필드에서 두 번째 텍스트까지 커서를 자동으로 전환하는 방법을 알고 있습니까? 감사합니다. – FONSPA

1

는이 같은 현재 textField 확인 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Boolif statement을 추가해야합니다

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { 
    if textFiled == input1 { 
    // do logic for input1 
    } else if textFiled == input2 { 
    // do logic for input2 
    } 
} 
1

스위프트 switch 문은 그것을 할 것입니다. 내가하지 착각입니다 경우

func textField(_ textField: UITextField, 
       shouldChangeCharactersIn range: NSRange, 
       replacementString string: String) -> Bool 
{ 
    switch textField { 
    case input1: 
     // ... 
    case input2: 
     // ... 
    case input3: 
     // ... 
    default: 
     break 
    } 
} 
0

사람들은 그 질문을 이해하지 못했습니다. 실제로 필요한 것은 javimuu에서 언급 한 것처럼 진술을 병합하는 것입니다.

javimuu의 것이 정확하기 때문에 내 대답은 끔찍합니다. 쓸모없는 방식으로 서로 득표하는 사람들을 투표하기에 충분한 담당자가 없기 때문에 답을 쓰고 있습니다.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, 
       replacementString string: String) -> Bool 
{ 
    let maxLength = 3 
    let currentString: NSString = textField.text! as NSString 
    let newString: NSString = currentString.replacingCharacters(in: range, with: string) as NSString 

    var startString = "" 
    if (textField.text != nil) 
    { 
     startString += textField.text! 
    } 
    startString += string 
    let limitNumber = Int(startString) 


    return newString.length <= maxLength && limitNumber! <= 360 
} 
+0

아닙니다. 반환은 FONSPA의 필요에 따라 정확하지 않고 정확합니다. 하지만 전 세계적으로 네, 동의합니다. – Acrasia

+0

내 비즈니스가 아닙니다. FONSPA의 코드에서 직접 가져온 것입니다. 나는 그의 기능이 올바른지 점검하기 위해 단위 테스트를 실행하지 않았다. 나는 그의 실제 질문에 대답하고있다. – Acrasia

+0

아닙니다.반환은 FONSPA의 필요에 따라 정확하지 않고 정확합니다. 하지만 전 세계적으로 그렇습니다. 동의합니다. – Acrasia