2017-08-12 13 views
0

以下は私のコードです。私もスクリーンショットを投稿しました。Swift 3 - 関数を実行できません

Button_CustomSegmentValueChangedは、私が作成したカスタムの分割コントロールです。その個々のボタンと正常に動作しているが、私も "SwipedRight"関数の内部から "Button_CustomSegmentValueChanged"関数を実行するが、私はそうするために正しいスイッチ値を渡すことができません。それに助けが必要です。

誰でも?

import UIKit 

class CredentialsViewController: UIViewController { 

    @IBOutlet weak var loginView: UIView! 
    @IBOutlet weak var signupView: UIView! 

    var currentSelectedView = 0 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let swipeR = UISwipeGestureRecognizer(target: self, action: #selector(CredentialsViewController.SwipedRight(swipe:))) 
     swipeR.direction = .right 
     view.addGestureRecognizer(swipeR) 

     let swipeL = UISwipeGestureRecognizer(target: self, action: #selector(CredentialsViewController.SwipedLeft(swipe:))) 
     swipeL.direction = .left 
     view.addGestureRecognizer(swipeL) 

     //Hide view 
     signupView.transform = CGAffineTransform(translationX: signupView.frame.size.width, y: 0) 
    } 

    @IBAction func Button_CustomSegmentValueChanged(_ sender: CustomSegmentedControl) { 

     switch sender.selectedSegmentIndex { 
     case 0: 
      LoadLoginView() 
      break 

     case 1: 
      LoadSignupView() 
      break 

     default: 
      break 
     } 

    } 

    func SwipedRight(swipe : UISwipeGestureRecognizer){ 
     if currentSelectedView == 1 { 
      Button_CustomSegmentValueChanged(0) 
      //LoadLoginView() 
     } 
    } 

    func SwipedLeft(swipe : UISwipeGestureRecognizer){ 
     if currentSelectedView == 0 { 
      //LoadSignupView() 
     } 

    } 

    func LoadLoginView(){ 

     UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseOut, animations: { 
      self.signupView.transform = CGAffineTransform(translationX : self.loginView.frame.size.width, y : 0) 
      self.loginView.transform = .identity 
      self.currentSelectedView = 0 
     }) 
    } 

    func LoadSignupView(){ 

     UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseOut, animations: { 
      self.signupView.transform = .identity 
      self.loginView.transform = CGAffineTransform(translationX: self.loginView.frame.size.width, y: 0) 
      self.currentSelectedView = 1 
     }) 
    } 


} 

Screenshot of my code and error

+0

Button_CustomSegmentValueChanged関数はパラメータとしてCustomSegmentedControlを受け取り、それにIntを送信しようとしています – 3stud1ant3

+0

こんにちは、あなたが言っていることを理解していますが、それを行う方法の正しいコードを教えてください。問題は、2つのオプションを持つカスタムのセグメント化コントローラを作成し、2つのビューを使用して2つの表示を切り替えることです。セグメント化されたコントロールをタップすると、すべて正常に動作します。私はスワイプ、その正常に動作しているが、セグメント化されたコントローラのセレクタは変更されません。その理由は、スイッチを理解するためにはタップする必要があるからです。私は他の関数からタップされた関数を呼び出すことによってそれを複製したいだけです。ビデオを見てくださいhttp://youtu.be/Z5CHq4-MeVo – Biks

+0

さて、あなたはCustomSegmentedControlのコードを表示できますか? – 3stud1ant3

答えて

0

私は

  1. 変更セグメントの動作を模倣するCredentialSegmentedController上のボタンの配列を使用することをお勧めカスタムセグメント制御からの出口を作る
  2. そして、このセグメントコントロールを使用してコードを修正下記のようなもの

    func SwipedRight(swipe : UISwipeGestureRecognizer) { 
    
          if currentSelectedView == 1 { 
            //Button_CustomSegmentValueChanged(0) 
            //LoadLoginView() 
            let btn = customSegmentOutlet.buttons[0] 
            customSegmentOutlet.buttonTapped(btn) 
          } 
        } 
    
        func SwipedLeft(swipe : UISwipeGestureRecognizer){ 
          if currentSelectedView == 0 { 
            //LoadSignupView() 
            let btn = customSegmentOutlet.buttons[1] 
            customSegmentOutlet.buttonTapped(btn) 
          } 
    
        } 
    
+0

あなたのコードが正常に動作しているが、私の問題が解決しません。問題は、2つのオプションを持つカスタムのセグメント化コントローラを作成し、2つのビューを使用して2つの表示を切り替えることです。セグメント化されたコントロールをタップすると、すべて正常に動作します。私はスワイプ、その正常に動作しているが、セグメント化されたコントローラのセレクタは変更されません。その理由は、スイッチを理解するためにはタップする必要があるからです。セレクタを切り替えるだけで、別の関数からタップされた関数を呼び出すことで、そのことを再現したいと思います。 は、ビデオhttps://youtu.be/Z5CHq4-MeVoを見てください – Biks

+0

、それはあなたにそれが働いていた... AWESOME – 3stud1ant3

+0

を助け場合、私はあなたの要件に応じて私の答えを更新し@Biks、あー...見ます!私は – Biks

1

必要な実際の型がCustomSegmentedControlですが、あなたはIntを渡しています。この問題を解決するには、CustomSegmentedControlIBOutletを作成し、Button_CustomSegmentValueChangedメソッドにパラメータとして渡してください。

func SwipedRight(swipe : UISwipeGestureRecognizer){ 
    if currentSelectedView == 1 { 
     customSegmentOutlet.selectedSegmentIndex = 0 
     Button_CustomSegmentValueChanged(customSegmentOutlet) 
     //LoadLoginView() 
    } 
} 
+0

私はアウトレットを作ったが、私のコードをどのようなコードで書くのですか?このdoesntの仕事正しく... FUNCのSwipedRight(スワイプ:UISwipeGestureRecognizer){ 場合currentSelectedView == 1 {// Button_CustomSegmentValueChanged(0) customSegmentOutlet.selectedSegmentIndex =(のために:.valueChanged)1 customSegmentOutlet.sendActions LoadLoginView( ) } } – Biks

+0

私の編集した回答を参照してください –

+0

それは働いていません..私は括弧の中の私の口を追加したが、それはそれを受け入れ、エラーを与えるdoes notの「型の値を変換できません...」 'customSegmentOutlet.selectedSegmentIndex = 1 Button_CustomSegmentValueChanged(customSegmentOutlet) LoadLoginView()' – Biks

0

あなたCustomSegmentedControlUISegmentedControlのサブクラスであると仮定すると、私はコード

@IBAction func button_CustomSegmentValueChanged(_ sender: UISegmentedControl?) { 
    // guard sender for nil before use 
} 

の数行を変更したとCustomSegmentedControlUISegmentedControlのサブクラスではない場合、それを変更するには、この

func swipedRight(swipe : UISwipeGestureRecognizer){ 
    if currentSelectedView == 1 { 
     let seg = UISegmentedControl() 
    seg.selectedSegmentIndex = 0 
    Button_CustomSegmentValueChanged(seg) 
    } 
} 

を呼び出すとき。

+0

こんにちはを助けることができるおかげでたくさんの..その完璧な作業になりました... – Biks

+0

代わりに新しいsegmentcontrollerを作成するのではなく、既存の1と使用は、それを使用するためのiboutletを作成してください –

関連する問題