2016-03-30 8 views
0

XIBファイルにコンポーネントを作成しました。このファイルには、私はそれからリンクされ、それがSampleViewFile's Ownerクラスの設定した2つの要素TableViewセル選択イベントがトリガーされない

  1. ラベル
  2. テーブルビュー

が含まれています。私はSampleView.swiftファイルや、このファイルでXIBファイルviewを添付しているだけのクラスのコードを次ています

@IBOutlet var view: UIView! 

を、私は今のプロトコルUIViewControllerUITableViewDelegateUITableViewDataSourceとコントローラファイルSampleControllerを作成しました。私はプログラム的Modalとして表示するには、このSampleControllerを使用しています

init() { 
     super.init(nibName: nil, bundle: nil) 

     modalPresentationStyle = UIModalPresentationStyle.Custom 
     view.addSubview(SampleView()) 
} 

:私は、カスタムコンポーネントを表示するには、init() FUNCだことで、次のコードを配置しています。

これらのコードは、ラベルとTableViewを示すモーダルとして表示されます。また、TableViewでデータを入力します。問題は次のとおりです。

私はテーブル内のセルをタップすると、それは最初の試行でイベントをトリガしません。別のセルをタップすると、前のセルイベントが発生します。

なぜこのようなことが起こっているのですか?

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     var cell = tableView.dequeueReusableCellWithIdentifier("CELL") 
     if (cell == nil) { 
      cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "CELL") 
     } 
     cell!.textLabel?.text = sampleData[indexPath.row]["title"] 
     return cell 
} 

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) { 
     print("tapped") 
} 
+0

細胞の再利用のようなSoudsの問題。必要な 'UITableViewDataSource'メソッドを実装しましたか?もしそうなら、それをあなたの質問に投稿できますか? – Koen

+0

@Koen私は、 'SampleController'ファイルにUIViewController、UITableViewDataSource、およびUITableViewDelegateを使用したことを述べました。データも十分にポピュレートされていますが、タップ・イベントは2番目のセルをタップした後にトリガーされます。 – codelearner

+0

あなたの 'cellForRowAtIndexPath'と' didSelectRowAtIndexPath'関数には何がありますか? – Koen

答えて

0

あなたはセルをデキューするためにさまざまな方法を使用する必要があります:

var cell = tableView.dequeueReusableCellWithIdentifier("CELL", forIndexPath: indexPath) 

nilのセルのチェックは不要です。ここ

は、細胞のタップを投入して処理するために使用2つの機能があります、 ところで。

+0

私は今このエラーを受け取りました: '識別子CELLのセルをデキューできません - 識別子のnibまたはクラスを登録しなければならないか、ストーリーボードのプロトタイプセルを接続する必要があります – codelearner

+0

はい、それを修正する必要があります。 SOを検索すると、多くの同様の問題が発生します。 – Koen

+0

動的セルを作成し、 'UITableViewController'の代わりに' UITableView'を使用する必要がある場合、これは必須ではありません。 – codelearner

2

私はdidSelectRowAtIndexPathの代わりにdidDeselectRowAtIndexPathを使っていました。それはあなたが真夜中以降にプログラミングしているときに起こります。

+0

これはよくある間違いです。この記事のアップフォースの数を見てくださいhttp://stackoverflow.com/a/12587624/3077831 – Wujo