Swift-使用委托在 tableView 上显示
Posted
技术标签:
【中文标题】Swift-使用委托在 tableView 上显示【英文标题】:Swift- Using Delegation to display on tableView 【发布时间】:2020-02-14 10:04:19 【问题描述】:在尝试学习在 Swift 中使用委托。问题是我使用委托将字符串值(从pickCourse()
到ViewController()
)附加到sampleArr
;但是,它似乎确实附加但没有出现在ViewController()
的tableview 上。我尝试使用viewWillAppear
,但我没有运气。有谁知道我在pickCourses()
中选择了someString
值后如何让sampleArr
出现在ViewController()
的tableview 上,该值会自动弹出到ViewController()
?
import UIKit
class ViewController: UITableViewController, testingDelegate
let cellId = "Something"
var sampleArr : [String] = []
func sendDataback(data: String)
sampleArr.append(data)
tableView.reloadData()
override func viewWillAppear(_ animated: Bool)
tableView.reloadData()
override func viewDidLoad()
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellId)
navigationItem.title = "Testing Delegate??"
navigationController?.navigationBar.prefersLargeTitles = true
self.view.backgroundColor = UIColor.white
let button1 = UIBarButtonItem(title: "Add A String", style: .plain, target: self, action: #selector(addTapped))
self.navigationItem.rightBarButtonItem = button1
@objc func addTapped(sender: UIBarButtonItem!)
let destination = PickCourses()
destination.delegate = self
navigationController?.pushViewController(destination, animated: true)
import UIKit
protocol testingDelegate
func sendDataback(data: String)
class PickCourses: UITableViewController
var delegate: testingDelegate?
let cellId = "leariningtopassdata"
let someString = [
"One One One One",
"Two Two Two Two",
"Three Three Three Three",
"Four Four Four",
"Five Five Five"
]
override func viewDidLoad()
super.viewDidLoad()
navigationItem.title = "Pick Some String"
navigationController?.navigationBar.prefersLargeTitles = true
tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellId)
tableView.delegate = self
tableView.dataSource = self
self.tableView.tableFooterView = UIView() //removes extra line in UITableView
tableView.isScrollEnabled = false //disables scrolling
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return someString.count
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath)
let stringlabel = self.someString[indexPath.row]
cell.textLabel?.text = stringlabel
return cell
let vc = ViewController()
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
tableView.deselectRow(at: indexPath, animated: true)
let data = someString[indexPath.row]
delegate?.sendDataback(data: data)
self.navigationController?.popViewController(animated: true)
【问题讨论】:
【参考方案1】:你应该阅读UITableViewController:
您还必须覆盖所需的数据源和委托方法 用数据填充表格。
我找不到您在 ViewController 中覆盖 the data source methods 的位置。您只在 PickCourses 中这样做了。
【讨论】:
在他的情况下,委托没有创建保留周期,但我同意该属性应标记为弱。 @MaticOblak 哦,是的,没有保留周期。我的坏:)。【参考方案2】:您应该在您的 cals 声明中插入以下内容:
class YourClassName: UIViewController, UITableViewDataSource, UITableViewDelegate
这将提示您添加委托方法,如下所示:
cellForRowAt, numbersOfSection, numbersOfRowInSection,
在实现所有这些之后,您可以在 cellForRow 方法中实现类似这样的内容:
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath)
cell.textLabel?.text = sampleArr![indexPath.row]
return cell
希望对你有帮助。
【讨论】:
以上是关于Swift-使用委托在 tableView 上显示的主要内容,如果未能解决你的问题,请参考以下文章
在 tableview 上调用 selectRowAtIndexPath 时出现 Swift 错误
在 Swift4 中取消选中 TableView 所有 TableView 选择
CustomCell(TableView)中的Swift Button将参数传递给targetMethod
如何使用 Swift 从 tableview 单元格中获取数据而不显示在标签上?
UITableView 永远不会在其委托上调用 tableView:shouldShowMenuForRowAtIndexPath: