2017-01-05 2 views
0

Я добавил жест в классе A для перехода вверх. Если проведите пальцем вверх, функция, доступная в классе B, должна вызываться, вызывая функцию класса B в классе A, функция вызывает вызов, но изменения пользовательского интерфейса не выполняются в классе 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

, он использует self в «moveUp» –

+0

метод вызова moveUp(), но пользовательский интерфейс меняет то, что я хочу в классе B, не производится, т.е. let fullView1: CGFloat = 100 10 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, которого нет на экране. Почему вы делаете это и когда вы нажимаете controller B. Надеюсь, вы получили свой ответ.

Смежные вопросы