2017-09-19 6 views
0

저는 현재 iOS를 처음 사용하고 있으며 현재 3 개의 뷰를 가지고 있으며 스 와이프 동작을 사용하여 그 사이를 탐색하려고합니다. 스 와이프가 작동합니다. 빨간색 bg보기가 먼저로드되고 원하는대로 잘리고, 다음 단추를 두드리는 것은 아무 것도하지 않지만 잘 작동합니다. 아무도 내게 힌트를 주시겠습니까? 나는이 문제에 접근하고 있지만, 캔트 구글하위 뷰 컨트롤러가있는 UIPageViewController

project 내 프로젝트에서

에 어떤 도움을 찾을 수가 나는 UIPageViewController 처리하는 MemberCardViewController 있습니다

class MemberCardViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate { 

    lazy var viewArray: [UIViewController] = { 

     return [self.ViewControllerInstance(name: "CalendarView"), 
       self.ViewControllerInstance(name: "IdCardView"), 
       self.ViewControllerInstance(name: "MemberInfoView")] 
    }() 

    private func ViewControllerInstance(name: String) -> UIViewController { 
     return UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.dataSource = self 
     self.delegate = self 
     loadViewController(viewPosition: 1) 
    } 

    func loadViewController(viewPosition: Int) { 
     if let viewController = viewArray.get(at: viewPosition) { 
      setViewControllers([viewController], direction: .forward, animated: true, completion: nil) 
     } 
    } 

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

그리고 지금은

, 나는 또한 생성을 ID 카드 (빨간색 배경보기)에 해당하는 IdCardViewController

class IdCardViewController: UIViewController { 

    var pvc = MemberCardViewController() 

    @IBAction func loadRight(_ sender: Any) { 
     pvc.loadViewController(viewPosition: 2) 
    } 
    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. 
    } 
} 

지금 직면 한 문제는 w hen 다음 ID 카드에서 다음 버튼을 클릭하면 회원 정보보기를로드하려고합니다.하지만 클릭하면 아무 일도 일어나지 않습니다. 그러나, 나는 MemberCardViewController의 loadViewController() 메서드에서 중단 점을 설정하고 버튼이 클릭되었을 때 앱이 도달하고있는 것을 볼 수 있지만,보기가 Member Info으로 변경되지 않습니다.

+0

코드에서 문제의 힌트를 얻지 못한다면 나 ([email protected])와 프로젝트를 공유 할 수 있습니까? 나는 모양을 가지고 당신을 업데이트 할 것입니다. – arunjos007

답변

1

pvc 변수에 IdCardViewController을 할당하지 않았습니다. 따라서 IdCardViewController의 인스턴스를 인스턴스화 할 때 MemberCardViewController 객체를 pvc 변수에 할당해야합니다. 행운을 빕니다!

편집

변경

private func ViewControllerInstance(name: String) -> UIViewController { 
     return UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name) 
    } 

IdCardViewController의 경우,이에 self이다 MemberCardViewController의 객체를 (인스턴스화 한 후, 여기에 이루어집니다 무엇
private func ViewControllerInstance(name: String) -> UIViewController { 
     if name == "IdCardView" 
     { 
      if let vc = UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name) as? IdCardViewController { 
       vc.pvc = self 
       return vc 
      } 

     } 
     return UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name) 
    } 

에 case)가 pvc 변수에 지정되었습니다. 또한이 코드가 작동하려면 스토리 보드에서 "ID 카드"보기 컨트롤러에 대한 올바른 클래스를 할당해야합니다. 그렇게하려면 스토리 보드에서 "Id 카드"보기 컨트롤러의 객체를 선택하고 "Identity Inspector"에서 클래스를 IdCardViewController으로 변경하십시오. 희망이 도움이됩니다!

+0

IdCardViewController가 인스턴스화 될 때'MemberCardViewController'를 지정해 주시겠습니까? 나는 무엇을 쓸지 알아낼 수 없다. – JapanGuy

+0

@JapanGuy 내가 내 대답을 편집했다. 도움이되는지 확인해 보라. –

+0

답변 해 주셔서 감사합니다. 이것은 굉장합니다! – JapanGuy