在制定布局规划时,我暂时将一些项目放入菜单中,但是在弄清楚如何使用indexPath.row -DidSelectRow时遇到了麻烦-
我有以下代码:
import UIKit
class DispatchViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var videos: [DispatchMenuItem] = []
override func viewDidLoad() {
super.viewDidLoad()
videos = createArray()
self.tableView.rowHeight = 65.0
tableView.dataSource = self
}
func createArray() -> [DispatchMenuItem] {
let video1 = DispatchMenuItem(image: #imageLiteral(resourceName: "truckUnloadIcon"), title: "Open Manifests")
let video2 = DispatchMenuItem(image: #imageLiteral(resourceName: "podIcon"), title: "Customer Pickup")
return [video1, video2]
}
}
extension DispatchViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return videos.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let video = videos[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "DispatchMenuItemCell") as! DispatchMenuItemCell
cell.setVideo(video: video)
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print(indexPath.row)
print(indexPath)
if indexPath.row == 1{
self.performSegue(withIdentifier: "goToOpenManifests", sender: nil)
}else if indexPath.row == 2{
self.performSegue(withIdentifier: "goToCustomerPickupForm", sender: nil)
}
}
}
您可以在我的DidSelectRow
底部附近看到它,但是它不想打印出indexPath.row,因此我假设所选的行现在以某种方式通过扩展名传递。
有什么建议吗?我通常只是通过UITableViewController来完成此操作,并且从未遇到过此问题,但是在这里我似乎陷入了困境。
答案 0 :(得分:0)
由于您尚未设置委托,因此不会打印出indexPath。仅实现方法是不够的,tableView
需要知道谁将实现委托方法。
委托和数据源之间是有区别的。
tableView.dataSource
将帮助您获取numberofSections,numberofRowsInASection和TableCell对象
tableView.delegate
将帮助您管理选择和取消选择。
override func viewDidLoad() {
super.viewDidLoad()
videos = createArray()
self.tableView.rowHeight = 65.0
tableView.dataSource = self
//Add this
tableView.delegate = self
}
答案 1 :(得分:0)
您只需要在viewDid加载方法的第一行代码下方添加并按如下所示改进代码。
tableView.delegate = self
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print(indexPath.row)
print(indexPath)
if indexPath.row == 0 {
self.performSegue(withIdentifier: "goToOpenManifests", sender: nil)
}else if indexPath.row == 1 {
self.performSegue(withIdentifier: "goToCustomerPickupForm", sender: nil)
}
}
希望这对您有所帮助。