使用手势从 TableView 切换到另一个 Tableview
Segue from TableView into another Tableview using gesture
我有 FirstTableView (TableView),它由具有图像和标签的单元格填充。如果用户点击标签,我想转到另一个表视图 (SecondTableView),它将使用前一个表视图中的标签作为路径(文件夹名)来搜索该文件夹中的图像并将它们显示为单元格。
我把一些零散的代码写在一起了,但我不太确定在哪里传递 perform segue
和 prepare for segue
函数。
这是我的 FirstTableViewController 的扩展,它填充了 FirstTableView 的单元格:
FirstTableView
extension FirstTableViewController: UITableViewDelegate, UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataCells.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let folderCell = dataCells[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "FirstTableCell") as! FirstTableViewCell
cell.setCell(cell:folderCell)
return cell
}
}
这是 FirstTAbleViewCell
的代码。请注意,我已经创建了 UITapGestureRecognizer
常量和一个 protocol
。如果单击 FolderLabel
,我想进入下一个表格视图。
func setCell
只是填充 FirstTableViews 的函数。
FirstTableViewCells
import UIKit
protocol LabelCellDelegate {
func func1(sender:Any)
}
class FirstTableViewCell: UITableViewCell {
@IBOutlet weak var ImageView: UIImageView!
@IBOutlet weak var FolderLabel: UILabel!
var delegate: LabelCellDelegate?
override func awakeFromNib() {
super.awakeFromNib()
FolderLabel.isUserInteractionEnabled = true
let recognizer = UITapGestureRecognizer(target: self, action:Selector(("handleTap:")))
recognizer.numberOfTapsRequired = 1
self.FolderLabel.addGestureRecognizer(recognizer)
}
func handleTap(recognizer: UITapGestureRecognizer){
delegate!.func1(sender: self)
}
func setCell (cell : FolderCell){
self.ImageView.image = cell.image
self.FolderLabel.text = cell.label
}
}
接下来是SecondTableViewController
。
不知何故,在从 FirstTableView 中点击单元格后,我想获取被点击的标签名称,并将该名称用作目录进行搜索。
抓取目录中的所有图像,并将它们显示为 SecondTableView 中单元格中的图像。我不太确定我应该在哪里调用 gesture
函数以及哪个 TableViewController 应该是单元格协议的委托。
第二个表格视图
import UIKit
class SecondTableViewController: UIViewController {
var Imagefiles: [String] //Imagefiles String. This are all images from tapped folder label.
var CellObjects: [folderCell] // Cellobjects to fill the cells. contains images and image names.
// need to get folder name from FirstTableViewCell how?
override func viewDidLoad() {
super.viewDidLoad()
imageFiles = getImageObjects(folder: Foldercell) //how to get access to folderCell???????
cellObjects = createArray(imageFiles: imageFiles)
}
func getImageObjects(folder: FolderCell) -> imageFiles: String {
//FUNCTION To search tapped label and grab all image file paths.
func createArray(imageFiles: string)-> tempArray: [folderCell]{
//We use this function to take the image files from above function and
//create cell objects to populate our cells
//in SecondTableView
}
}
}
}
extension ViewController: LabelCellDelegate{
func1(folderLabel : String) {
return folderLabel
}
}
extension LablesTableView:UITableViewDataSource,UITableViewDelegate{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return CellObjects.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellFolderObject = folderObjects[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "SecondCell") as! LabelCell
let folderCell = CellObjects[indexPath.row]
cell.setCell(cell: folderCell)
return cell
如您所见,我还没有调用 perform segue
和 prepare for segue
。我不确定我应该给他们打电话。
我也不确定手势协议的委托应该在哪里。
谢谢。
里面cellForRowAt
设置
cell.delegate = self
//
然后在VC这个委托函数里面(符合协议LabelCellDelegate
)
extension FirstTableViewController:LabelCellDelegate {
func func1(sender: FirstTableViewCell) {
self.performSegue(withIdentifier: "goToSecond", sender:sender.FolderLabel.text!)
}
}
//
VC方法从这里触发
func handleTap(recognizer: UITapGestureRecognizer){
delegate!.func1(sender: self)
}
//
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let secondController = segue.destination as? SecondTableViewController {
secondController.sendedStr = sender as! String
}
}
我有 FirstTableView (TableView),它由具有图像和标签的单元格填充。如果用户点击标签,我想转到另一个表视图 (SecondTableView),它将使用前一个表视图中的标签作为路径(文件夹名)来搜索该文件夹中的图像并将它们显示为单元格。
我把一些零散的代码写在一起了,但我不太确定在哪里传递 perform segue
和 prepare for segue
函数。
这是我的 FirstTableViewController 的扩展,它填充了 FirstTableView 的单元格:
FirstTableView
extension FirstTableViewController: UITableViewDelegate, UITableViewDataSource{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataCells.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let folderCell = dataCells[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "FirstTableCell") as! FirstTableViewCell
cell.setCell(cell:folderCell)
return cell
}
}
这是 FirstTAbleViewCell
的代码。请注意,我已经创建了 UITapGestureRecognizer
常量和一个 protocol
。如果单击 FolderLabel
,我想进入下一个表格视图。
func setCell
只是填充 FirstTableViews 的函数。
FirstTableViewCells
import UIKit
protocol LabelCellDelegate {
func func1(sender:Any)
}
class FirstTableViewCell: UITableViewCell {
@IBOutlet weak var ImageView: UIImageView!
@IBOutlet weak var FolderLabel: UILabel!
var delegate: LabelCellDelegate?
override func awakeFromNib() {
super.awakeFromNib()
FolderLabel.isUserInteractionEnabled = true
let recognizer = UITapGestureRecognizer(target: self, action:Selector(("handleTap:")))
recognizer.numberOfTapsRequired = 1
self.FolderLabel.addGestureRecognizer(recognizer)
}
func handleTap(recognizer: UITapGestureRecognizer){
delegate!.func1(sender: self)
}
func setCell (cell : FolderCell){
self.ImageView.image = cell.image
self.FolderLabel.text = cell.label
}
}
接下来是SecondTableViewController
。
不知何故,在从 FirstTableView 中点击单元格后,我想获取被点击的标签名称,并将该名称用作目录进行搜索。
抓取目录中的所有图像,并将它们显示为 SecondTableView 中单元格中的图像。我不太确定我应该在哪里调用 gesture
函数以及哪个 TableViewController 应该是单元格协议的委托。
第二个表格视图
import UIKit
class SecondTableViewController: UIViewController {
var Imagefiles: [String] //Imagefiles String. This are all images from tapped folder label.
var CellObjects: [folderCell] // Cellobjects to fill the cells. contains images and image names.
// need to get folder name from FirstTableViewCell how?
override func viewDidLoad() {
super.viewDidLoad()
imageFiles = getImageObjects(folder: Foldercell) //how to get access to folderCell???????
cellObjects = createArray(imageFiles: imageFiles)
}
func getImageObjects(folder: FolderCell) -> imageFiles: String {
//FUNCTION To search tapped label and grab all image file paths.
func createArray(imageFiles: string)-> tempArray: [folderCell]{
//We use this function to take the image files from above function and
//create cell objects to populate our cells
//in SecondTableView
}
}
}
}
extension ViewController: LabelCellDelegate{
func1(folderLabel : String) {
return folderLabel
}
}
extension LablesTableView:UITableViewDataSource,UITableViewDelegate{
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return CellObjects.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellFolderObject = folderObjects[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "SecondCell") as! LabelCell
let folderCell = CellObjects[indexPath.row]
cell.setCell(cell: folderCell)
return cell
如您所见,我还没有调用 perform segue
和 prepare for segue
。我不确定我应该给他们打电话。
我也不确定手势协议的委托应该在哪里。
谢谢。
里面cellForRowAt
设置
cell.delegate = self
//
然后在VC这个委托函数里面(符合协议LabelCellDelegate
)
extension FirstTableViewController:LabelCellDelegate {
func func1(sender: FirstTableViewCell) {
self.performSegue(withIdentifier: "goToSecond", sender:sender.FolderLabel.text!)
}
}
//
VC方法从这里触发
func handleTap(recognizer: UITapGestureRecognizer){
delegate!.func1(sender: self)
}
//
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let secondController = segue.destination as? SecondTableViewController {
secondController.sendedStr = sender as! String
}
}