UITableViewCell 创建
UITableViewCell Creation
大家好,我在右侧有一个按钮 (+) navigationBarItem
,我正在尝试创建一个功能,当您单击此按钮时,您会在 [=12] 中创建一个 cell
=],你可以给它一个 title
和一个 image.
您可以更新数据源中的值并使用 tableView.reloadData()
。这将重新加载 table 并向 table 添加一个新单元格。因此你也可以给它一个标题和图像。
只需更新数据源的计数
创建变量
var rowCount:Int = 0
添加函数改变变量值
@IBAction func addCell(sender:AnyObject) {
rowCount = rowCount + 1
tableView.reloadData()
}
在table视图的数据源委托方法中,使用这个变量
func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int
{
return rowCount
}
在委托方法中设置标题和图片
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//add logic here
return cell
}
我会首先创建一个结构来表示您的单元格数据。
struct Object {
var image: UIImage!
var title: String!
}
然后您可以将 Object
的数组作为您的 table 视图的数据源。
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 { [=11=].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 { [=11=].text }
self.object.flatMap { self.objects.append([=11=]) }
self.tableView.reloadData()
})
present(alert, animated: true, completion: nil)
}
// MARK: Actions
@IBAction func didSelectCreateButton() {
object = Object()
present(picker, animated: true, completion: nil)
}
}
您将需要一个图像选择器供用户选择图像,并且您可以使用警报视图来获取用户输入的标题。通过符合 UIImagePickerControllerDelegate
,您可以检测图像何时被选取或用户是否取消。
当按下创建按钮时,我们创建一个空的 object 并显示选择器。在我们用所选图像填充 object 之后,我们将显示文本字段警报视图。如果按下保存按钮,则会将 object 添加到数据源并重新加载 table 视图。
大家好,我在右侧有一个按钮 (+) navigationBarItem
,我正在尝试创建一个功能,当您单击此按钮时,您会在 [=12] 中创建一个 cell
=],你可以给它一个 title
和一个 image.
您可以更新数据源中的值并使用 tableView.reloadData()
。这将重新加载 table 并向 table 添加一个新单元格。因此你也可以给它一个标题和图像。
只需更新数据源的计数
创建变量
var rowCount:Int = 0
添加函数改变变量值
@IBAction func addCell(sender:AnyObject) { rowCount = rowCount + 1 tableView.reloadData() }
在table视图的数据源委托方法中,使用这个变量
func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int { return rowCount }
在委托方法中设置标题和图片
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { //add logic here return cell }
我会首先创建一个结构来表示您的单元格数据。
struct Object {
var image: UIImage!
var title: String!
}
然后您可以将 Object
的数组作为您的 table 视图的数据源。
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 { [=11=].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 { [=11=].text }
self.object.flatMap { self.objects.append([=11=]) }
self.tableView.reloadData()
})
present(alert, animated: true, completion: nil)
}
// MARK: Actions
@IBAction func didSelectCreateButton() {
object = Object()
present(picker, animated: true, completion: nil)
}
}
您将需要一个图像选择器供用户选择图像,并且您可以使用警报视图来获取用户输入的标题。通过符合 UIImagePickerControllerDelegate
,您可以检测图像何时被选取或用户是否取消。
当按下创建按钮时,我们创建一个空的 object 并显示选择器。在我们用所选图像填充 object 之后,我们将显示文本字段警报视图。如果按下保存按钮,则会将 object 添加到数据源并重新加载 table 视图。