2016-12-30 8 views
0

次は、タブバーが2度目にタップされたかどうかを検出するさまざまなソースのコードです。Swift 3タブバーをタップしてテーブルビューの一番上にスクロールする方法

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { 
     var previousController: UIViewController? = nil 
     if previousController == viewController { 
      // the same tab was tapped a second time 
      print("scroll to top") 
      if viewController.responds(to: #selector(self.scrollToTop)) { 
       viewController.perform(#selector(self.scrollToTop)) 
      } 
     } 
     previousController = viewController 
    } 

    func scrollToTop() { 
     self.tableView.contentOffset = CGPoint(x: CGFloat(0), y: CGFloat(0 - self.tableView.contentInset.top)) 
    } 

もう一度タブバーをタップすると、印刷(「上にスクロール」)は呼び出されません。私のコードで何が問題になるのでしょうか?

答えて

0

あなたはnilを取得している、との条件

var previousController: UIViewController? = nil 
0

場合ので、それはあなたがタップを検出している、そのクラスのインスタンスとして「previousController」を宣言すべきでは行っていないので、これはかもしれれます。

var previousController: UIViewController? = nil 


コードのあなたの上の行は、常にnilにあなたがタブバー上で、条件が真の結果は決してありません場合はタップするたびに初期化されます。

+0

previousControllerをそのクラスのインスタンスとして宣言することはどういう意味ですか? – Wilson

+0

これは、このようなクラスで表示される変数として作成する必要があります クラスsmapleClassName:UIViewController { var previousController:UIViewController! override func viewDidLoad(){ super.viewDidLoad() } –

関連する問題