2017-02-09 9 views
0

私はUIView内にtableViewを持っています。このtableviewには3つのボタンがあり、1つは既にグリーンXIで動作しています。右のテキストフィールドの値は、これらは私が助けが必要なものです。セル内のボタン電池のスーパーでデリゲート関数を呼び出すためのデリゲートを使用してボタンでtableViewCell内のUITextFieldの値を変更する

enter image description here

@IBActions、緑のXの付いたボタンは、すでにそれを行うことになっているものやって、取り組んでいるが、私は何をするか必要があります今では、製品の数量(Cantidad)を増減するボタンの動作をプログラムする方法です。私の代理機能は既にデータを処理していますが、現在はCantidad TextField値も処理する必要があります。ユーザがボタンを押すとcantidadTextField.textが更新されます。

私は、TableVIewをホストしているクラスからセル内のcantidadTextField.textプロパティにアクセスするにはどうすればよいか知る必要があります。

セルを作成するときにCellForRowAtIndexPathメソッドでこれを行うことができますが、デリゲートのメソッド内で行う必要があります。

ありがとうございました!

答えて

0

なぜtableviewcontrollerからtextFieldを更新しようとしていますか?私が理解したところで、あなたが質問に投稿したイメージは、uitableviewcellでしょうか? (「Productos」タイトルを除く)

uitableviewcell内でこのような動作をすべて管理するのが最適です。これは、コントローラー内の各@IBActionのuitextフィールドを更新することです。以下のような何か:

@IBAction func plusPressed() { 
    let previousAmount = Int(cantidadTextField.text!) 
    cantidadTextField.text = "\(previousAmount + 1)" 
} 

@IBAction func minusPressed() { 
    let previousAmount = Int(cantidadTextField.text!) 

    guard let previousAmount > 1 else { return } 

    cantidadTextField.text = "\(previousAmount - 1)" 
} 

このaproachを行うことができず、コントローラからそれを更新する必要がある場合には、コントローラ内の変数でそれを作成しているとき、あなたはセルへの参照を保存することができます。しかし、セルの再利用のために、このセルは、例えばスクロールしている間に、後で別の「プロダクト」のために再使用されることに注意してください。

多分、いくつかのコードで問題がよく見えます!

+0

理由がありますスーパービューの値をセルに渡す必要がある場合は、さらに複雑になります。 コントローラで変数を作成していない理由は、セルの再利用によるものです。 私のコードを共有することはできますが、UIViewには3つのカスタムTableViewがあり、それぞれが動作によって異なる動作と異なるNibを持つため、Viewはかなり複雑です。 –

0

は私がする必要がどのような

を解決し、細胞から直接テキストフィールドにアクセスするテキストフィールドの値を更新してから、その後、同様のデータを更新し、デリゲートを呼び出すことでした。

これはメソッドの1つです。私はスーパーにロードされたplistに格納された変数を必要とするので、私は、細胞から直接TextFieldを更新しない

@IBAction func increaseAmount(_ sender: UIButton) { 

    let cantidadStr = cantidadProducto.text 

    if let cantidadInt = Int(cantidadStr!) { 
     var cantidad = cantidadInt 
     cantidad += 1 
     let strCantidad = String(cantidad) 

     cantidadProducto.text = strCantidad 
    } 

    self.delegate?.increaseProductQuantityTapped(sender: self, at: indexPath) 

} 

そして、他の1

@IBAction func decreaseAmount(_ sender: UIButton) { 

    let cantidadStr = cantidadProducto.text 

    if let cantidadInt = Int(cantidadStr!) { 
     var cantidad = cantidadInt 
     if cantidad > 1 { 
      cantidad -= 1 
      let strCantidad = String(cantidad) 

      cantidadProducto.text = strCantidad 

      self.delegate?.decreaseProductQuantityTapped(sender: self, at: indexPath) 
     } else { 
      return 
     } 
    } 
}