Iphone 根据按下的按钮将数据传递到tableViewController
我是swift的初学者,但我在HTML、CSS和一些Java方面有不错的背景。我做这个解释就是想问这个问题,所以我会直截了当地说 我真的很喜欢swift,但实际上我花了一周的时间一遍又一遍地写同样的代码,查阅了无数的教程、书籍、指南等,但都没有用;我不会说谎,我真的厌倦了在我的编译器中看到10多个错误堆积在一起,因为我一直在努力找出答案 我有一个ViewController,还有一个TableViewController——ViewController是我的主屏幕。在上述viewController上,我有两个按钮,一个用于BuildingItems,另一个用于BuildingBlocks。两者都是分段的 在我的TableViewController上,我有构建块和构建项,它们都定义了它们的数组 我想做的是,根据用户选择的按钮,我希望它成为用于填充我的tableview的数据。我可以使用普通单元格.textLabel?.text=arrayNameHere[indexPath.row]专门填充tableview,但显然这并不能解决我的问题 我希望你能在这里帮助我。我为糟糕的语法和格式道歉,在过去的一周里,我每天花4-5个小时试图让它正常工作,结果我只是生气了,三次删除了我的整个项目。我将包括下面的代码。同样,请原谅格式错误。我不知道为什么我似乎不能理解swift,我一直在尝试每一种代表的变化,试图传递一些可以让它工作的东西,但什么都不起作用 视图控制器:Iphone 根据按下的按钮将数据传递到tableViewController,iphone,swift,uitableview,uiviewcontroller,delegates,Iphone,Swift,Uitableview,Uiviewcontroller,Delegates,我是swift的初学者,但我在HTML、CSS和一些Java方面有不错的背景。我做这个解释就是想问这个问题,所以我会直截了当地说 我真的很喜欢swift,但实际上我花了一周的时间一遍又一遍地写同样的代码,查阅了无数的教程、书籍、指南等,但都没有用;我不会说谎,我真的厌倦了在我的编译器中看到10多个错误堆积在一起,因为我一直在努力找出答案 我有一个ViewController,还有一个TableViewController——ViewController是我的主屏幕。在上述viewControll
@IBAction func BuildItems (_sender: Any) {
}
@IBAction func BuildBlocks (_sender: Any) {
}
在TableViewController中:
let buildItems = ["these are all my", "arrays for this"]
let buildBlocks = ["same thing here","just saving time"]
class TableViewController: UITableViewController {
var myIndex = 0
override func tableView(_ tableView: UITableView, numberOfRowsInSection: Int) -> Int {
return buildItems.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell" for: indexPath)
cell.textLabel?.text = buildItems[indexPath.row]
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
myIndex = indexPath.row
}
}
在tableView控制器和helpArray中创建布尔变量
var dataArray:[String] = []
var isBuildItem:Bool = false
在您的第一个控制器中,实现如下prepareForSegue方法:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? TableViewController {
//set true or false it depends of which button you click
vc.isBuildItem = //true or false
}
}
然后在viewDidLoad中,在TableViewController中检查bool变量
if(isBuildItem:Bool){
dataArray = buildItems
}
else{
dataArray = buildBlocks
}
在所有tableView委托方法中,使用ViewController中的dataArray更改buildItems数组:
import UIKit
var segueName = ""
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
segueName = segue.identifier!
print(segueName)
}
}
import UIKit
class TableViewController: UITableViewController
{
let animals = ["Cat","Dog","Mouse"]
let colors = ["White","Blue","Red"]
var arrayResult = [""]
override func viewDidLoad()
{
super.viewDidLoad()
if segueName == "seguebuttonA"
{
arrayResult = animals
}
else if segueName == "seguebuttonB"
{
arrayResult = colors
}
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int
{
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
// #warning Incomplete implementation, return the number of rows
return arrayResult.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "cellTest", for: indexPath) as! TableViewCell
// Configure the cell...
cell.titleLabel.text = arrayResult[indexPath.row]
return cell
}
}
TableViewController:
import UIKit
var segueName = ""
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
segueName = segue.identifier!
print(segueName)
}
}
import UIKit
class TableViewController: UITableViewController
{
let animals = ["Cat","Dog","Mouse"]
let colors = ["White","Blue","Red"]
var arrayResult = [""]
override func viewDidLoad()
{
super.viewDidLoad()
if segueName == "seguebuttonA"
{
arrayResult = animals
}
else if segueName == "seguebuttonB"
{
arrayResult = colors
}
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int
{
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
// #warning Incomplete implementation, return the number of rows
return arrayResult.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "cellTest", for: indexPath) as! TableViewCell
// Configure the cell...
cell.titleLabel.text = arrayResult[indexPath.row]
return cell
}
}
添加序列名称:
完整的例子在下面的链接中,我希望我有帮助,如果你有任何问题,请告诉我。
您只需要一个步骤:从
ViewController
到TableViewController
在视图控制器中
为按下的按钮创建一个变量:
var category = ""
按下按钮时更改值,然后继续:
@IBAction func BuildItems (_sender: Any) {
category = "BuildItems"
self.performSegue(withIdentifier: "segue", sender: self)
}
@IBAction func BuildBlocks (_sender: Any) {
category = "BuildBlocks"
self.performSegue(withIdentifier: "segue", sender: self)
}
然后在准备中
:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segue" {
let vc = segue.destination as! TableViewController
// Assuming you created a variable called sentCategory in the TableViewController
vc.sentCategory = category
}
}
在TableViewController
中创建一个空数组:
let data = [String]()
在viewDidLoad
中:
if sentCategory == "BuildItems" {
data = buildItems
} else {
data = buildBlocks
}
使用数据
变量填充表格视图
有几点意见:
- 把所有的东西都放在你的课堂范围内,除非你有充分的理由不这样做
- 在这种情况下,您不需要委托。使用如上所示的
功能传递数据prepare