嘿伙计我在右侧navigationBarItem
有一个按钮(+),我正在尝试创建一个功能,当您点击此按钮时,您在cell
中创建UITableViewCell
,你可以给它一个title
和一个图像。
答案 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)
只需更新数据源计数
创建变量
var rowCount:Int = 0
添加一个更改变量值的函数
@IBAction func addCell(sender:AnyObject) {
rowCount = rowCount + 1
tableView.reloadData()
}
在表视图的datasource委托方法中,使用此变量
func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int
{
return rowCount
}
在委托方法中设置标题和图像
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//add logic here
return cell
}