2017-08-08 12 views
-1

私はテーブルビュー内にサインアップフォームがあり、そのサインアップフォームにはユーザーがプロフィール画像を選択できます。Swift 3 "didFinishPickingMediaWithInfo"テーブルビューのセル内の画像

画像を選択してテーブルビューセルの画像を更新するにはどうすればよいですか?

セルを許可するにはどうすればよいですか。内部の "func imagePickerController()"はtableviewの中にありませんか?

Click for code

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

if let orginalImage = info[UIImagePickerControllerOriginalImage] as? UIImage { 

cell.profileImage.image = orginalImage 

} 

else { print ("error") } 

picker.dismiss(animated: true, completion: nil) 

} 
+0

エラーが複数の細胞が何であるかに思われます。 –

+0

オリジナルイメージをグローバルにして、このイメージをタブビューセルに渡します。そこにセルを作成することはできません –

+0

テーブルビューの代理人を使用する必要があります今のようにセルにアクセスできません –

答えて

0

didFinishPickingMediaWithInfoメソッドでセルファイルオブジェクトを作成するだけです。

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) 
    { 


     //cell file object 
     let cell = tblView.cellForRow(at: IndexPath.init(row: 0, section: 0)) as! ProfileTableViewCell //cell file object 

     let imgTemp = info[UIImagePickerControllerOriginalImage] as? UIImage// get image from imagePickerViewController 
     cell.imgViewProfile.image = imgTemp 
     cell.imgViewProfile.layer.cornerRadius = cell.imgViewProfile.frame.size.width/2 // make image circle 
     cell.imgViewProfile.layer.masksToBounds = true 
     appDelegate.window?.rootViewController?.dismiss(animated: true, completion: nil) 
    } 
+0

で述べたように、viewController内にグローバル変数を作成する方が良いでしょう。完璧に動作します。 –

+0

それから投票してください。私の答えは – Jaydip

+0

です。@BrettTaylorは私の答えをupvoteしてください。 – Jaydip

0
var orginalImage 

if orginalImage = info[UIImagePickerControllerOriginalImage] as? UIImage { 

tableView.reloadData() 

} 

//今、あなたはあなたのAppDelegateのよう

var globalImage = UIImage() 

、あなたのイメージ変数を作成しますcellForRowAtIndexPath

cell.profileImage.image = orginalImage 
-1

この画像を使用することができます値を取得してAppDelegateに送信します。 cellforRowAt下のように、そのTableViewCellにあなたのケースでアプリデリゲート変数に

self.appDelegate.globalImage = "your image here" 

を値を渡すと、あなたは

以下のように取得したいところはどこでもあなたの値を取得するために

let appDelegate = UIApplication.shared.delegate as! AppDelegate 

以下のようなAppDelgateオブジェクトを作ります

cell.profileImage.image = appDelegate.globalImage 

値渡し

+0

アプリケーションデリゲートを使用して、1つのviewController内でのみ使用されるイメージを格納する必要はなく、OPは@Latif kumarのコメント – Malik

1

インサイドdidfinishPickingMediaWithInfo uは画像を追加し、単にセル内部のImageViewのに選んだ画像を割り当てる必要があり、セルを再利用します。

シンプルに!

0

あなただけ

  1. あなたのコントローラにローカル変数を追加しなければなりません。
  2. 例えば画像ピッカーからVaRの画像に設定
  3. リロードセル/テーブル

class ImageViewController: UIImagePickerControllerDelegate, UITableViewDelegate, UITableViewDataSource { 

     var image: UIImage? 
     weak var table: UITableView! 

     func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

      if let orginalImage = info[UIImagePickerControllerOriginalImage] as? UIImage { 
      self.image = orginalImage 
     } else { print ("error") } 
      picker.dismiss(animated: true, completion: nil) 
     } 

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

      let cell = tableView.dequeueReusableCell(withIdentifier: "cellIdentifier", for: indexPath) 

      return cell 
     } 

     override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { 
      let _cell = cell 

      _cell.imageView.image = self.image 
     } 

} 
関連する問題