2017-02-10 8 views
0

やあみんな、私は右navigationBarItemにあるボタン(+)は、私はあなたがこのボタンをクリックすると、あなたはUITableViewCellcellを作成する機能を作成しようとしています持っている、とあなたはそれをtitleと与えることができますイメージUITableViewCellの創造

+0

テーブルビューに使用しているデータソースコードを表示します。 –

答えて

2

私はあなたのセルのデータを表現するための構造体を作成することから始めます。

struct Object { 
    var image: UIImage! 
    var title: String! 
} 

次に、Objectの配列をテーブルビューのデータソースにすることができます。

class ViewController: UITableViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

    // MARK: Properties 

    var object: Object? 
    var objects: [Object] = [] 
    var picker: UIImagePickerController! 

    // MARK: Lifecycle 

    override func viewDidLoad() { 

     super.viewDidLoad() 

     picker = UIImagePickerController() 
     picker?.allowsEditing = false 
     picker?.delegate = self 
     picker?.sourceType = .photoLibrary 
    } 

    // MARK: UITableViewDataSource 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     return objects.count 
    } 

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

     let cell = UITableViewCell(style: .default, reuseIdentifier: "Cell") 
     let object = objects[indexPath.row] 

     cell.imageView?.image = object.image ?? UIImage() 
     cell.textLabel?.text = object.title ?? "" 

     return cell 
    } 

    // MARK: UIImagePickerControllerDelegate 

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

     switch info[UIImagePickerControllerOriginalImage] as? UIImage { 
     case let .some(image): 
      object?.image = image 
     default: 
      break 
     } 

     picker.dismiss(animated: true) { 
      self.showCellTitleAlert() 
     } 
    } 

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 

     object = nil 

     dismiss(animated: true) { 
      self.tableView.reloadData() 
     } 
    } 

    // MARK: Alerts 

    private func showCellTitleAlert() { 

     let alert = UIAlertController(title: "Cell Title", message: nil, preferredStyle: .alert) 

     alert.addTextField { $0.placeholder = "Title" } 
     alert.addAction(UIAlertAction(title: "Cancel", style: .cancel) { 
      self.object = nil 
     }) 
     alert.addAction(UIAlertAction(title: "Save", style: .default) { _ in 
      self.object?.title = alert.textFields?.first.flatMap { $0.text } 
      self.object.flatMap { self.objects.append($0) } 
      self.tableView.reloadData() 
     }) 

     present(alert, animated: true, completion: nil) 
    } 

    // MARK: Actions 

    @IBAction func didSelectCreateButton() { 

     object = Object() 

     present(picker, animated: true, completion: nil) 
    } 
} 

イメージを選択するにはイメージピッカーが必要です。アラートビューを使用して、タイトルのユーザー入力を行うことができます。 UIImagePickerControllerDelegateに準拠させることにより、画像が選択されたとき、またはユーザがキャンセルしたときを検出することができます。

作成ボタンを押すと、空のオブジェクトが作成され、ピッカーが表示されます。選択したイメージをオブジェクトに埋め込んだ後、テキストフィールドのアラートビューを表示します。保存ボタンを押すと、オブジェクトがデータソースに追加され、テーブルビューがリロードされます。

+1

それは完璧に働いていただきありがとうございます! –

+0

よろしくお願いします! – Callam

1

データソースの値を更新してtableView.reloadData()を使用できます。これにより、テーブルがリロードされ、新しいセルがテーブルに追加されます。したがって、あなたはそれにタイトルとイメージを与えることができます。

1

だけで、データソースのデリゲートメソッドで変数の値

@IBAction func addCell(sender:AnyObject) { 

    rowCount = rowCount + 1 
    tableView.reloadData() 
} 
  • に変更する機能を追加

    1. が変数

      var rowCount:Int = 0 
      
    2. を作成したデータソースの数を更新テーブルビューの、この変数を使用

      func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int 
      { 
          return rowCount 
      } 
      
    3. デリゲートメソッドで

      設定されたタイトルと画像

      func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
      
          //add logic here 
          return cell 
      } 
      
  • 関連する問題