2017-11-28 8 views
0

그래서 앱을 만들 때이 앱은 처음 로그온 할 때 비밀번호가 필요합니다. 그러면 다른 앱으로 이동할 수있는 기본 앱으로 연결됩니다. . 내가 암호보기 컨트롤러를 설정하는 방법은 레이어가 있고 신속한 파일에서 변수 ('x')가 특정 상황에 따라 변경된다는 것입니다. x 값이 변경되면보기에있는 내용도 변경됩니다. 예를 들어, 첫 번째 레이어는 x = '1.0'일 때 활성화되며 이는 비밀번호가 아직 입력되지 않았 음을 의미합니다. 그것이 입력되면, x = '1.5'그리고 그것은 당신이 패스워드를 가지고 있다는 것을 알려주는 화면을 불러오고 메인 페이지로 인도하는 버튼이 나타납니다.

기본 페이지에는 암호를 변경할 수있는 첫 페이지로 다시 연결되는 단추가 있습니다. 기본 페이지에서 x 값을 변경하여 열 때 비밀번호 페이지에 completly 새 페이지가 표시되게하고 싶습니다.

내 문제는 내가 segue를 작동시키지 못한다는 것입니다. 여기Xcode (스위프트) :보기 컨트롤러간에 데이터를 전송할 수 없습니다.

import UIKit 

class ViewController: UIViewController { 

var x = "1.0" 
//First Page-------------------------------- 
@IBOutlet weak var Textbar: UITextField! 
@IBOutlet weak var submitbutton: UIButton! 
@IBOutlet weak var enterYourPasscode: UILabel! 
@IBOutlet weak var Welcome: UILabel! 


//1.5------------------------------- 
@IBOutlet weak var correct: UILabel! 
@IBOutlet weak var Open: UIButton! 

@IBAction func CloseKeyboard(_ sender: AnyObject) { 
    self.resignFirstResponder() 
} 
var password="Ree" 


@IBAction func SubmitClick(_ sender: Any) { 
    if Textbar.text == password { 
     x = "1.5" 
     checkVersion() 

    }else{ 
     enterYourPasscode.text="Wrong, try again." 
    } 
} 

func checkVersion(){ 

    if x == "1"{ 
     correct.isHidden = true 
     Open.isHidden = true 

     Textbar.isHidden = false 
     submitbutton.isHidden = false 
     enterYourPasscode.isHidden = false 
     Welcome.isHidden = false 
    } 
    if x == "1.5"{ 
     correct.isHidden = false 
     Open.isHidden = false 

     Textbar.isHidden = true 
     submitbutton.isHidden = true 
     enterYourPasscode.isHidden = true 
     Welcome.isHidden = true 
    } 
} 

override func viewDidLoad() { 

    checkVersion() 

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

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


} 

내가 데이터를 보낼보기에 대한 코드는 다음과 같습니다 :

import UIKit 

class ViewController2: UIViewController { 

@IBOutlet weak var Settings: UIButton! 

@IBAction func GoToSettings(_ sender: Any) { 





} 


override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 
} 

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

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    var recievingController = segue.destination as! ViewController 
    ViewController.x = "2.0" 
} 


} 

오류가 두 번째 뷰 컨트롤러 위치에 나타납니다 여기 제 2 뷰 컨트롤러의 샘플 코드는 그것은 "viewController.x = '2.0'"이고 "인스턴스 멤버 'x'는 'ViewController'유형에서 사용할 수 없습니다."

나는 왜 그것이하고 있는지 알아 내려고 많은 시간을 보냈습니다 이 문제는 과거에 비슷한 문제를 일으키지 않았습니다. 나는 쉬운 해결책이있는 동안 그것을 overthinking 수도 있고 그 이유는 내가 지역 사회에게 물어 보는 이유입니다.

편집 : 도움을 요청한 모든 사람에게 감사드립니다. 문제가 해결되었습니다.

답변

1

대상을 ViewController로 다운 캐스팅하면이를 receivingController 변수에 저장합니다. 단순 : 해당 변수를 참조하십시오.

receivingController.x = "2.0" 

오류가 사라졌습니다. 그건 그렇고, 당신은 잘못 '수신':

+0

롤, 감사합니다! –

+0

문제 없습니다. 답변을 수락 (체크 표시를 클릭)하고 upvote해야합니다 :) – Xcoder

+0

15 명성이 없습니다. 나는 그랬지만 공개적으로 보여주지는 않습니다. –

-1

을 한마디로 철자, 문제의 직접적인 원인은 다음과 같습니다

var x = "1.0" 

이어야

public var x = "1.0" 

하지만 스타일 현명한, 그것을 LoginManager라는 클래스에서이 속성을 래핑하는 것이 더 좋을 수 있습니다.

0

당신은 당신의 코드에 문제가있는의 ViewController

0

의 인스턴스이기 때문에 두 번째보기에 recievingController.x하지 ViewController.x를 이동해야합니다.

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    var recievingController = segue.destination as! ViewController 
    ViewController.x = "2.0" 
} 

이 시도 : 도움을

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    var recievingController = segue.destination as! ViewController 
    recievingController.x = "2.0" 
}