2017-01-05 18 views
0

upswipeのクラスAにジェスチャを追加しました。スワイプするとclassBで使用可能な関数を呼び出す必要があり、classAでclassB関数を呼び出しても関数は呼び出されますが、クラスBでは作成されません。事前にSwift3が別のクラスの関数を実装できません

おかげ

class A: UIViewController { 

     var swipeUp = UISwipeGestureRecognizer() 
     override func viewDidLoad() { 
      super.viewDidLoad() 

      swipeUp = UISwipeGestureRecognizer(target: self, action: #selector(self.respondToSwipeGestureUp)) 
      swipeUp.direction = UISwipeGestureRecognizerDirection.up 
      self.view.addGestureRecognizer(swipeUp) 
     } 

     func respondToSwipeGestureUp(gesture: UIGestureRecognizer) { 
      if let swipeGesture = gesture as? UISwipeGestureRecognizer { 
       switch swipeGesture.direction { 

       case UISwipeGestureRecognizerDirection.up: 
         UserDefaults.standard.set("open", forKey: "status") 
         UserDefaults.standard.synchronize() 
         print("Swiped up") 
         B().moveUp() 
       default: 
         break 
       } 
      } 
    } 
} 

class B: UIViewController { 

    func moveUp() { 

     let status = UserDefaults.standard.object(forKey: "status") as! String 
     if status .isEqual("open") 
     { 
      let fullView1: CGFloat = 100 
      self.view.frame = CGRect(x: 0, y: fullView1, width: self.view.frame.width, height: self.view.frame.height) 

     } 
     else 
     { 

     } 
    } 
} 
+0

あなたは 'B()。moveUp()'をチェックしましたか?Bはまだ紹介されていますか? – nynohu

+1

クラスBのインスタンスを新規作成しています...クラスBのインスタンスを保持します –

+0

どのようにAからBに移行していますか?プロトコルと委譲パターンはここで関連します。 –

答えて

0

は、クラスメソッド

class func moveUp() { 

// your code 

} 

としてあなたの方法を作るとして、それを呼び出す:

B.moveUp() 
+0

彼は "moveUp"で自己を使用しています –

+0

moveUp()メソッドが呼び出されても、UIがクラスBで何を変更するのかはわかりません fullView1:CGFloat = 100 self.view.frame = CGRect(x:0、y:fullView1、width:self.view.frame.width、height:self.view.frame.height) –

1

あなたがいなかったので、クラスB UIが変更されません。ナビゲーション内にはB controllerがあります。つまり、画面にcontroller Aが存在し、SwipeGestureイベントの場合は、画面にまだ表示されていないcontroller Bを使用してUIを更新しています。なぜあなたはこれをやっているのですか?あなたはいつ押しましたかcontroller B。 あなたの答えが得られたら幸いです。

関連する問題