2016-08-01 2 views
1

ViewController1과 ViewController2라는 두 개의보기 컨트롤러가 있습니다. 내 목표는 ViewController1의 특정 조건이 충족되면 segue가 트리거 될 때 viewController2의 텍스트 필드를 사용하지 않도록 설정하는 것입니다.대상보기 컨트롤러에서 텍스트 필드 사용 안 함

설정이 shouldPerformSegueWithIdentifierprepareForSegue이고 모두 정상적으로 작동하지만 조건을 입력하면 오류가 발생하여 선택 사항 - 텍스트 필드의 언 래핑 오류가 발생했다는 메시지가 나타납니다. 내 ViewController1은 다음과 같습니다 대상 컨트롤러와 관련된

override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject!) -> Bool { 
    if condition1=true{ 
     return true 
    } 
    else{ 
     return false 
    } 
} 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if (segue.identifier=="segue"){ 
     let destVC:ViewController=segue.destinationViewController as! ViewController2 
     if n==1{ 
      destVC.myTextField.enabled=false 
     } 
    } 
} 

답변

2

, 오류 unwrapping an optional textField을 받고 왜 그게 전부, 그래서 당신의 충돌이 ViewController2 내부에 하나 개 Bool 인스턴스를 생성하고 prepareForSegue 방법으로 값을 전달할 해결합니다.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if (segue.identifier=="segue"){ 
      let destVC:ViewController=segue.destinationViewController as! ViewController2 
      if n==1{ 
       destVC.isEnabled=false 
      } 
    } 
} 

많은 Nirav은, 마치 마법처럼 작동

var isEnabled: Bool = true 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.myTextField.enabled = self.isEnabled 
} 
+0

덕분에이 같은 ViewController2 내부에 예를 isEnabled를 만들고 ViewController2viewDidLoad에 그것을 사용! – user440309

+0

안녕하세요, 해피 코딩 :) –

+0

질문이 하나 더 있는데, n 값이 변경 될 때까지 isEnabled 값을 false로 유지 하시겠습니까? 나는 다른 viewController에 가거나 원래의 상태로 되 돌린다. nsuserdefaults에 값을 저장해야 하는가? – user440309

0

전망은 그 시점에서 인스턴스화/아직로드되지 않습니다.

대상 VC에 인스턴스 부울 플래그를 만들고 준비 시드 함수에서이를 설정합니다. 그런 다음 대상 VC에서 viewDidLoad 이상에서 해당 스위치를 확인하고 텍스트 필드를 비활성화합니다.

0

그런 다음이

myTextField.userInteractionEnabled = false 

활성화하고 텍스트 필드의 userInteractionEnabled을 해제 할 수있는 대상 뷰 컨트롤러에서 조건을 설정할 수 있습니다. ViewController2myTextField 아직 초기화되지 prepareForSegue 방법

관련 문제