UITableViewCell创建

时间:2017-02-10 05:26:33

标签: swift xcode uitableview swift3 tableviewcell

嘿伙计我在右侧navigationBarItem有一个按钮(+),我正在尝试创建一个功能,当您点击此按钮时,您在cell中创建UITableViewCell ,你可以给它一个title和一个图像

3 个答案:

答案 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 :(得分:1)

您可以更新数据源中的值并使用tableView.reloadData()。这将重新加载表并向表中添加一个新单元格。因此,你也可以给它一个标题和图像。

答案 2 :(得分: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
    }