0

Iam UIPageViewControllerを使用してアプリケーションを初めて開く。 3番目のページは私のログインページです。これにはfacebook loginが含まれています。 Facebookログインボタンをクリックしたとき、空のページとxcodeを開くと、この出力が表示されます"分離されたビューコントローラでの表示コントローラの提示は避けてください< tapusor.LoginPage:0x101f09a00>Swift 3 - UIPageViewController - デタッチビューコントローラーでビューコントローラーを表示することはお勧めしません。

とき私はこのボタンが作動しているUIPageViewControllerを使用してはいけません。だから私のコードがあります。この問題を解決するにはどうすればよいですか?

import UIKit 

class MyPageViewController: UIPageViewController, 
UIPageViewControllerDataSource, UIPageViewControllerDelegate { 

var pageContainer: UIPageViewController! 
// The pages it contains 
var pages = [UIViewController]() 

// Track the current index 
var currentIndex: Int? 
private var pendingIndex: Int? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Setup the pages 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let page1: UIViewController! = storyboard.instantiateViewController(withIdentifier: "firstVC") 
    let page2: UIViewController! = storyboard.instantiateViewController(withIdentifier: "secondVC") 
    let page3: UIViewController! = storyboard.instantiateViewController(withIdentifier: "LoginPage") 
    pages.append(page1) 
    pages.append(page2) 
    pages.append(page3) 

    pageContainer = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil) 
    pageContainer.delegate = self 
    pageContainer.dataSource = self 
    pageContainer.setViewControllers([page1], direction: UIPageViewControllerNavigationDirection.forward, animated: false, completion: nil) 
    // Add it to the view 
    view.addSubview(pageContainer.view) 

} 

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { 

    let currentIndex = pages.index(of: viewController)! 
    if currentIndex == 0 { 
     return nil 
    } 
    let previousIndex = abs((currentIndex - 1) % pages.count) 
    return pages[previousIndex] 
} 

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { 

    let currentIndex = pages.index(of: viewController)! 
    if currentIndex == pages.count-1 { 
     return nil 
    } 
    let nextIndex = abs((currentIndex + 1) % pages.count) 
    return pages[nextIndex] 

} 

func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) { 
    pendingIndex = pages.index(of: pendingViewControllers.first!) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

} 

また、私はこの

let page3: UIViewController! = storyboard.instantiateViewController(withIdentifier: "LoginPage") 

この

let page3: UIViewController! = storyboard.instantiateViewController(withIdentifier: "LoginPage") as! LoginPage 

に試みることができるか、この

let page3: LoginPage! = storyboard.instantiateViewController(withIdentifier: "LoginPage") as! LoginPage 

処理されません。

答えて

1

LoginPageコントローラ用にdelegateを作成し、Facebookのログインボタンが押されたことを通知する機能を備えています。このような何か:

protocol LoginPageDelegate: class { 
    func loginPageDidPressFacebookButton(_ controller: LoginPage) 
} 

今すぐあなたのLoginPageクラスにdelegateプロパティを追加

class LoginPage: UIViewController { 
    weak var delegate: LoginPageDelegate? 
} 

今、あなたは、デリゲートを通知する必要がある場合に、ユーザープレスFacebook login button

@IBAction func facebookButtonPressed(button: UIButton) { 
    self.delegate?.loginPageDidPressFacebookButton(self) 
} 

ではなく、あなたがこれに購読することができますMyPageViewControllerdelegate

まず、あなたはあなたのLoginPageを表示する前に、それはクラスLoginPageDelegate

class MyPageViewController: UIPageViewController, 
UIPageViewControllerDataSource, UIPageViewControllerDelegate, LoginPageDelegate { 

    //MARK: LoginPageDelegate methods 

    func loginPageDidPressFacebookButton(_ controller: LoginPage) { 
     //present what you need here 
    } 
} 

そして今に準拠させる必要があります。

let page3: LoginPage! = storyboard.instantiateViewController(withIdentifier: "LoginPage") 
    page3.delegate = self 
+0

実は私のFacebookのボタンをウェブに自動的に開いていたし、任意のアクションをhasnt。あなたの答えを試してみると変わります。ありがとう(: – HiKa

関連する問題