2016-06-11 43 views
0

我想刷卡功能添加到我的viewcontrollers之間的應用程序和刷卡在本教程中添加:https://www.youtube.com/watch?v=3jAlg5BnYUU 本教程的源代碼是在這裏:https://www.veasoftware.com/posts/swipe-navigation-in-swift-xcode-7-ios-9-tutorial不能viewcontroller's幀到滾動視圖在另一個視圖 - 控制

在該指南中,他們使用的是nib/xib文件,它們與相應的視圖控制器一起創建,然後用它們在ViewController的構造函數中調用。

我已經完成了相同的工作,並且在教程中也是如此。但我也想使用沒有xib文件的ViewController,因爲它在我的故事板上。該視圖控制器在我的代碼中被稱爲ViewController2,並且這是我滑動時唯一沒有出現在滾動視圖中的視圖控制器。另外兩個是因爲我在構造函數調用中調用xibName,但ViewController2沒有xib文件,因爲它位於我的故事板上。

那麼如何將它添加到滾動視圖,以便它在我滑動時出現?

@IBOutlet weak var scrollView: UIScrollView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let vc0 = ViewController0(nibName: "ViewController0", bundle: nil) 

    self.addChildViewController(vc0) 
    self.scrollView.addSubview(vc0.view) 
    vc0.didMoveToParentViewController(self) 

    let vc1 = ViewController1(nibName: "ViewController1", bundle: nil) 

    var frame1 = vc1.view.frame 
    frame1.origin.x = self.view.frame.size.width 
    vc1.view.frame = frame1 

    self.addChildViewController(vc1) 
    self.scrollView.addSubview(vc1.view) 
    vc1.didMoveToParentViewController(self) 

    let vc2 = ViewController2() 

    var frame2 = vc2.view.frame 
    frame2.origin.x = self.view.frame.size.width 
    vc2.view.frame = frame2 

    self.addChildViewController(vc2) 
    self.scrollView.addSubview(vc2.view) 
    vc2.didMoveToParentViewController(self) 

    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 3, self.view.frame.size.height - 66); 
} 

回答

1

試着做以下幾點:

1)獲取故事板對象編程。

2)爲故事板文件中的視圖控制器2提供故事板ID。您可以通過轉到Main.storyboard文件並選擇您希望給予標識符的視圖控制器,然後查看Identity Inspector(它應該位於「身份」部分下)來做到這一點。enter image description here

3)實例化視圖控制器2的一個實例,故事板方法instantiateViewControllerWithIdentifier。此方法使用故事板ID作爲參數,並將其添加爲滾動視圖的子項。

像這樣:

@IBOutlet weak var scrollView: UIScrollView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    //1 
    let mainStoryboard = UIStoryboard.init(name: "Main", bundle: NSBundle.mainBundle()) 

    //3 
    let vc2 = mainStoryboard.instantiateViewControllerWithIdentifier("<InsertStoryBoardID>") as! ViewController2 
    self.addChildViewController(vc2) 
    self.scrollView.addSubview(vc2.view) 
    vc2.didMoveToParentViewController(self) 

    self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width * 3, self.view.frame.size.height - 66); 
} 

希望這有助於!隨意問的問題!

+0

謝謝!除了ViewController2的視圖的框架尺寸是其他ViewController的框架尺寸(ViewController0.view.frame和ViewController1.view.frame)的一半外,其他工作方式都是有效的。我通過設置'frame2.size.width = frame1.width'解決了這個問題。爲什麼幀尺寸是其他幀尺寸50%的默認值? – Rox

+1

@Rox,這可能是因爲你有**調整視圖從NIB **檢查你的Main.storyboard文件中的'ViewController2'(我相信這是默認的)。要檢查轉到你的Main.storyboard文件,選擇ViewController2,轉到屬性檢查器,並在「View Controller - > Layout」部分下面,如果選中了,則取消選中**調整從NIB **視圖。正如這個問題所示:http://stackoverflow.com/questions/14520561/wrong-frame-value-while-accessing-the-view-from-storyboard-in-ios – Ike10

+0

哦!情況就是這樣!謝謝! :-) – Rox

相關問題