2017-02-10 13 views
0

Эй, ребята, у меня есть кнопка (+) в правом navigationBarItem, я пытаюсь сделать функцию, где при нажатии на эту кнопку, вы создаете cell в UITableViewCell, и вы можете дать ему title и image.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

Просто обновить счетчик источника данных

  1. Создать переменную

    var rowCount:Int = 0 
    
  2. Добавить функцию, чтобы изменить значение переменной

    @IBAction func addCell(sender:AnyObject) { 
    
        rowCount = rowCount + 1 
        tableView.reloadData() 
    } 
    
  3. В методе DataSource делегата таблицы, используйте эту переменную

    func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int 
    { 
        return rowCount 
    } 
    
  4. Устанавливает заголовок и изображение в методе делегата

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    
        //add logic here 
        return cell 
    } 
    

 Смежные вопросы

  • Нет связанных вопросов^_^