2016-04-24 7 views
0

私の例では3つのボタンがあります。同じ責任レベルを持つ2つのボタンと3番目のボタンは、最初のボタンに依存します。ボタン1またはボタン2が押されたかどうかに応じて、3番目のボタンがボタン1またはボタン2のいずれかのメソッドを呼び出すようにします。従属性を作成するためのIBActionへの送達方法名

exampleMenu.buttnOne.addTarget(self, action: #selector(ViewController.firstBtnFunc(_:)), forControlEvents: .TouchUpInside) 
exampleMenu.buttnTwo.addTarget(self, action: #selector(ViewController.secondBtnFunc(_:)), forControlEvents: .TouchUpInside) 

私は私のニーズを解決するために、このような何かを考えていた:

var currentButton:String = "" 

func buttnOne(button: UIButton) { 
    currentButton = "buttnOne" 
} 

func buttnTwo(button: UIButton) { 
    currentButton = "buttnTwo" 
} 

@IBAction func thirdButtonAction(sender: AnyObject) { 

    if currentButton == "buttnOne" { 
     buttnOne() 
    } else if currentButton == "buttnTwo" { 
     buttnTwo() 
    } 
} 

しかし、私はエラーを取得するその方法:ViewController.buttnOne()を使用してMissing argument for parameter #1 in call

は私にエラーを与える:Use of instance member buttnOne on type ViewController; did you mean to use a value of type ViewController instead?

問題を解決するにはどうすればよいですか?ヘルプは非常に感謝しています。

編集要求通り:

enter image description here

は、現時点ではインターフェースを気にしないでください。ベータ版でまだ完成していません。しかし、それはアイデアを与える。 ユーザーにカテゴリを選択させたい。液体のように。 ML(ミリリットル)のようなサブカテゴリです。

MLボタンは、次のコードをしている:今、私は、ユーザーが入力した値を再計算するために、再度関数を呼び出すキーボード部のボタンを「行く」たい

func mlBtnFunc(button: UIButton!) { 
    var numberInt:Double = Double(numberStr)! 

    tableData = ["Mililiter", "Centiliter", "Liter", "Ounces", "Cups", "Gallons"] 
    tableCounterData = ["\(numberInt) ml", "\(numberInt * 0.1) cl", "\(numberInt * 0.01) l", "\(numberInt * 0.0338135) oz", "\(numberInt * 0.00422676) cups", "\(numberInt * 0.000264172) gallons"] 
    print(numberStr) 

    currentButton = "mlBtnFunc" 
} 

。それを実現するために、私はそのように今それを呼び出す:

@IBAction func enterKeyboardAction(sender: AnyObject) { 

    if currentButton == "mlBtnFunc" { 
     mlBtnFunc(nil) 
    } else if currentButton == "clBtnFunc" { 
     clBtnFunc(nil) 
    } 

} 

あなたは本当にこのベストプラクティスを呼び出すことはできませんが、私は...計算しているかの値の任意のアドバイスをenterKeyboardActionを伝える方法がわかりません感謝します。しかし、アプリがやっている瞬間、私は彼女にしたい。

+0

私はボタンから計算を因数分解を示唆しています。 MLボタンとGoボタンの両方を再計算する必要があるので、それらを呼び出す関数を再計算することができます。 'recalculate'は、現在のボタンが何であるかを調べ、そのボタンに対して正しい再計算を行うことができます。つまり、MLボタンのコードは 'currentButton =" mlBtnFunc "になります。 recalculate() '、' enterKeyboardAction'コードは単に 'recalculate()'になります。最初に、 'recalculate'は' currentButton'に依存して大きな 'switch'ステートメントになりますが、私はそれをさらに洗練する方法を考えることができます... – matt

+0

これは実際にはファクタリングの良いアイデアです。私は計算する20の値を持っているので、esp。あなたの時間とアドバイスをありがとう –

+0

私は何をしようとしているのは、データ(モデル)とのインターフェイス(ビュー)を混在させないようにすることです。あなたのコードでは、「MLボタンを再びタップしたふりをしている」というメッセージが表示されます。それは何が起こったのではないので、間違っていると感じます。ユーザーが[Go]ボタンをタップしました。私が言っていることは、もしMLボタンとGoボタンが同じことをするならば、一つのボタンが他のボタンであるとふりまえるのではなく、独立して行うことです。 – matt

答えて

2

buttnOneおよびbuttnTwoメソッドではUIButtonパラメータが必要ですが、呼び出すときに指定する必要はありません。彼らは時々buttonパラメータを受け取りますとそうでない時には、あなたはオプションのUIButtonパラメータでそれらを宣言しnilでそれらを呼び出すことができ、このような場合:

func buttnOne(button: UIButton!) { 
    currentButton = "buttnOne" 
} 

func buttnTwo(button: UIButton!) { 
    currentButton = "buttnTwo" 
} 

@IBAction func thirdButtonAction(sender: AnyObject) { 

    if currentButton == "buttnOne" { 
     buttnOne(nil) 
    } else if currentButton == "buttnTwo" { 
     buttnTwo(nil) 
    } 
} 
+0

ありがとうございます。それはそれをしました。私はもう今日はupvoteできません。 (限界に達した)私は明日の朝までになります。 4分で私は解決としてチェックします。ありがとうございました! –

+0

しかし、これはちょうどストップです。提案されているアーキテクチャ全体が非常に疑わしいです。 – matt

+0

もし私が実際のポイントが何であるかをよく理解すれば、私は完全に改訂されたアーキテクチャを提案するでしょう。 – matt

関連する問題