2017-01-11 2 views
-2

ここでは非常に新しいです。私は簡単なアプリを作ろうとしています。ユーザーインタラクション中にクラスはどのように読み込まれますか?

ユーザーがタスクを入力すると、このタスクを文字列配列に追加してカウンタを増やしてみてください。

複数のタスクを入力すると、文字列配列には以前に入力したタスクのみが保持され、カウンタは常に1です(カウンタは文字列配列の項目数に基づいています)。

私は新しいタスクをタイプするたびに、私の文字列配列とカウンタを処理するクラスは空の文字配列と0である初期値にリセットされると仮定しています。

これを避ける方法や、ユーザーとのやりとりに際してクラスがどのように読み込まれるかを考えてください。

申し訳ありませんが、あまりにも明確ではない場合は、ありがとう。

class TextInputTableViewCell: UITableViewCell, UITextFieldDelegate { 
... 
var lastItem = 0 
var tableViewData: Array<String> = [] 

... 

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 

    tableViewData.append(textField.text!) 
    lastItem = tableViewData.count 
    textField.resignFirstResponder() 
    return true 

} 

のViewControllerメインクラス:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate { 
... 
+0

あなたは、あなたが持っているコードを投稿してもらえますか? –

+0

申し訳ありません、今すぐ追加しました – brownmamba

答えて

1

問題はtableViewDataTextInputTableViewCellの財産であるということです。これは、tableviewがリロードされるたびに、この変数に格納されていた内容を失うことを意味します。 UITableViewControllerUITextFieldDelegateとし、そのテキストをUITableViewControllerのプロパティに格納することでこれを解決できます。これは、TextInputTableViewCellをロードするときに実行できます。たとえば:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate { 

    var lastItem = 0 
    var tableViewData: Array<String> = [] 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

     // Load your cell  
     let cell: TextInputTableViewCell = ... 

     // Set the text field delegate 
     cell.textField.delegate = self 
     return cell 
    } 

    func textFieldShouldReturn(_ textField: UITextField) -> Bool { 

     tableViewData.append(textField.text!) 
     lastItem = tableViewData.count 
     textField.resignFirstResponder() 
     return true 
    } 
} 

だからあなたTextInputTableViewCellは次のようになります。それはそれは間違って起こっている場所を確認する方が簡単ですので

class TextInputTableViewCell: UITableViewCell { 

    @IBOutlet weak var textField: UITextField! 

} 
+0

私はUITableViewControllerを使用せず、UITableViewを持つViewControllerだけを使用します。私はちょっとあなたが最後の文と何かを混同しています。 ViewControllerクラスを設定する方法を追加しました – brownmamba

+0

例としていくつかのコードを追加しました。あなたの 'TextInputTableViewCell'が、' textField'と呼ばれるUITextFieldを持っていると仮定しています –

+0

私の 'tablewView cellForRowAt'関数に' cell.textField.delegate = cell'が既に設定されていましたが、うまく動作するようです – brownmamba

関連する問題