2016-11-30 8 views
1

私はレシピアップロード機能を備えたレシピアプリケーションを構築しようとしています。 PostControllerでは、すべての調理ステップのテーブルビューがテーブルビューセル内にあります。セル内にはテキストフィールドの説明があり、UIImageViewピクチャアップロード用です(pickerControllerから選択した画像は、後でアップロードするためにこのUIImageViewに表示されます)。私はしようとしています imageViewInCell.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleImageUpload))) UIImagePickerControllerを生成するhandleImageUpload()関数を呼び出すことです。しかし、これを行うことで、私は2つの問題に直面しました。各テーブルビューセルでUIImagePickerControllerを使用

  1. IバックセルのUIImageViewに選択された画像を割り当てることができないインデックスアウトとIは、UITapGestureRecognizerで選択することによって、細胞のindex.row値を得ることができません。
  2. handleImageUploadでindex.rowを取得したとしても、選択したイメージを割り当てるには以下の関数が必要です。この関数はどのようにして自分のパラメータを受け入れ、対応するimageViewInCellを見つけるでしょうか?

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
        if let selectedImage: UIImage = info[UIImagePickerControllerOriginalImage] as? UIImage { 
         imageViewInCell.image = selectedImage 
        } 
        dismiss(animated: true, completion: nil) 
    } 
    
+1

didSelectRowAtIndexPathの代わりにタップジェスチャーを使用するのはなぜですか? –

+0

この操作はピクチャにのみ関連しているだけなので、imageViewにUITapGestureを追加しました。 didSelectRowAtIndexPathの使用は選択肢ではないかもしれません。セルにもテキストフィールドがあるからです。 –

+0

最後に、handleImageUpload()が呼び出されるたびに、グローバル変数 'selectedIndex'(' didFinishPickingMediaWithInfo'で使用)と 'cell.imageViewInCell.tag'(' handleImageUpload() 'で使用)の両方でインデックスを保存しました。 'selectedIndex'に値' cell.imageViewInCell.tag'を割り当てます。 'didFinishPickingMediaWithInfo'では、対応するセルを見つけるためにグローバル変数をとります。 –

答えて

1

あなたは以下

cell.yourImageView.tag = indexPath.row 

ようcellForRowAtIndexPathであなたのImageViewののタグとしてindexPath.rowを設定することができ、その後、あなたが

let indexPath = NSIndexPath(forRow: sender.tag, inSection: 0) 
let cell = tableView.cellForRowAtIndexPath(indexPath) as! yourcellClass! 
cell.yourImgeView.image = selectedImage 
+0

このアイデアは役に立ちます。問題は今解決されました、ありがとう! –

+0

歓迎幸せコーディング.... –

0
の下に使用してbackagainこのindepathを得ることができます

thehandleImageUpload()は、セル全体の代わりにimageViewのタップでのみ呼び出すようにしたいと思っていますしたがって、あなたはタップジェスチャーを使用しています。今

は、あなたの質問に答える、このようなあなたのImageViewのにタグを割り当てるには:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
{ 
//cell configuration 
cell.imageView.tag = indexPath.row 
return cell 
} 

そして、あなたはこのように選択したセルに、選択した画像を割り当てることができます。今すぐ

あなたhandleImageUpload()は次のとおりです。

func handleImageUpload(_ sender: UITapGestureRecognizer){ 
selectedIndexPath = sender.tag 
} 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
    if let selectedImage: UIImage = info[UIImagePickerControllerOriginalImage] as? UIImage { 
      let cell = self.tableView.cellForRowAtIndexPath(selectedIndexPath) as UITableViewCell 
      cell.imageViewInCell.image = selectedImage 
    } 
    dismiss(animated: true, completion: nil) 
} 
+0

ジェスチャーメソッドでは、GestureRecognizerオブジェクトを渡すことはできません。 –

+0

さて、それを編集させてください。 –

+0

編集された回答。 –

関連する問題