4

4 개의 ViewController가 있습니다. UITabbedbar는 사용자 지정하기가 더 어렵 기 때문에 사용하지 않습니다. 모달 세구 (modal segue)를 사용하지만 메모리 소비가 과도하다고 생각합니다. 이것은 첫 번째 및 두 번째 VC의 스크린 샷입니다. View를 올바르게 변경하려면 무엇을 사용해야합니까? 의Swift에서 VC 문제가 변경되었습니다. 탭 막대 컨트롤러에서보기간에 데이터를 전달하는 방법?

enter image description here


코드가 내가 사용 : 스토리 보드 다이어그램에서

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if (segue.identifier == "second") { 
     let secondVC = segue.destinationViewController as SecondViewController; 


    } 
} 
+0

? (현재로서는 실제로 아무 것도하지 않습니다 ...) –

+0

나는 "두번째"segue를 호출했습니다 –

+0

그 코드에서 세그개를 호출하지 않고 있습니다 ... secondVC를 로컬 상수로 설정하고 아무 것도하지 않는 것. 그 전체적인 방법을 제거하면 segue가 여전히 수행되는 것을 볼 수 있습니다. –

답변

12

, 당신이 다른 당신의 "탭 표시 줄"각 버튼에서 SEGUE을 만든 것이 분명하다 뷰 컨트롤러. unwind segue을 제외하고, segues는 항상 전환 할보기 컨트롤러의 새 인스턴스를 만듭니다. 따라서 설정을 사용하여보기 컨트롤러 1에서보기 컨트롤러 2로 전환 한 다음 다시보기 컨트롤러 1로 돌아 가면 원래보기 컨트롤러로 돌아 가지 않고 완전히 새로운보기 컨트롤러 1을 생성하게됩니다.

메모리 소비가 많은 이유입니다. 앱이 충돌 할 때까지 View Controller를 계속 생성합니다.

탭바 컨트롤러를 사용하는 것이 좋습니다. 뷰 컨트롤러를 한 번 앞쪽으로 할당 한 다음 두 뷰 사이를 전환하도록 설계되었습니다. 또한, 그들은 이유에 대한 표준보기를 가지고, 그것은 당신의 애플 리케이션 사용자가 즉시 그들과 상호 작용하는 방법을 알고 도움이됩니다.


탭간에 데이터를 전달하려면 탭을 전환 할 때 끊김이 일어나지 않으므로 섹그를 사용하지 마십시오. 이렇게 할 수있는 방법에는 여러 가지가 있지만, 모든 탭이 모든 탭에서 액세스 할 수있는 모델 데이터를 저장하는 것으로 종결됩니다. 더 큰 응용 프로그램에서 CoreData으로이 작업을 수행 할 수 있습니다. 간단한 응용 프로그램의 경우 다음을 수행 할 수 있습니다.

  1. UITabBarController의 사용자 정의 하위 클래스를 만듭니다. 그것을 CustomTabBarController이라고 부르 자. 해당 클래스에서 각 탭에서 액세스 할 모델 데이터를 만들고 보유하게하십시오.

    CustomTabBarController.swift : 스토리 보드에서

    import UIKit 
    
    // This class holds the data for my model. 
    class ModelData { 
        var name = "Fred" 
        var age = 50 
    } 
    
    class CustomTabBarController: UITabBarController { 
    
        // Instantiate the one copy of the model data that will be accessed 
        // by all of the tabs. 
        var model = ModelData() 
    
        override func viewDidLoad() { 
         super.viewDidLoad() 
    
         // Do any additional setup after loading the view. 
        } 
    } 
    
  2. 은 Identity Inspector에서이 CustomTabBarControllerUITabBarController의 클래스를 변경합니다. 각 탭에 viewWillAppear에서

  3. enter image description here

    , 모델 데이터에 대한 참조를 가져 그리고 당신은 그것을 사용할 수 있습니다.

    FirstViewController.swift :

    import UIKit 
    
    class FirstViewController: UIViewController { 
    
        override func viewWillAppear(animated: Bool) { 
         // Get a reference to the model data from the custom tab bar controller. 
         let model = (self.tabBarController as CustomTabBarController).model 
    
         // Show the we can access and update the model data from the first tab. 
         // Let's just increase the age each time this tab appears and assign 
         // a random name. 
         model.age++ 
    
         let names = ["Larry", "Curly", "Moe"] 
         model.name = names[Int(arc4random_uniform(UInt32(names.count)))] 
        } 
    
    } 
    

    SecondViewController.SWIFT : 당신이 그 코드와 함께 일을하려고 무엇

    import UIKit 
    
    class SecondViewController: UIViewController { 
        @IBOutlet weak var nameLabel: UILabel! 
        @IBOutlet weak var ageLabel: UILabel! 
    
        override func viewWillAppear(animated: Bool) { 
         // Get a reference to the model data from the custom tab bar controller. 
         let model = (self.tabBarController as CustomTabBarController).model 
    
         // This tab will simply access the data and display it when the view 
         // appears. 
         nameLabel.text = model.name 
         ageLabel.text = "\(model.age)" 
        } 
    } 
    
+0

나는 당신의 대답이 기본적으로 옳다고 생각하지만, OP는 그녀가 탭 바를 사용하지 않는다는 것을 분명히하기 위해 대답을 업데이트했다. 아마도 당신은 당신의 추론이 어떻게 적용되는지를 설명하기 위해 당신의 대답을 편집해야 할 것입니다. –

+0

탭 막대가있는보기간에 데이터를 전달할 수 있습니까? –

+0

데이터를 전달하는 방법에 대한 업데이트 된 답변을 확인하십시오. – vacawama

관련 문제