如何将@IBAction func 数据放入 TableView?

Posted

技术标签:

【中文标题】如何将@IBAction func 数据放入 TableView?【英文标题】:How to get @IBAction func data into TableView? 【发布时间】:2017-11-23 17:25:13 【问题描述】:

我正在为 ios 中的搜索结果编写一个表格视图。

这是我的视图控制器:

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource 

var resultArray = NSMutableArray()
@IBOutlet weak var scoreTableView: UITableView!
@IBOutlet weak var inputText: UITextField!

override func viewDidLoad() 
    super.viewDidLoad()


override func viewWillAppear(_ animated: Bool) 
    scoreTableView.reloadData()


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return resultArray.count

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    XXXXXXX
    return cell

这是我的搜索和@IBAction 函数。

func search() -> NSMutableArray
     XXXXXXXXX
     return array


@IBAction func btnSearch(_ sender: Any) 
     resultArray = search() 

但是,在构建之后,我的表格视图是空白的。在debugDescription() 中,我可以看到func search() 运行良好并打印了搜索日志。

tableview 中的resultArray 不是@IBAction 中的那个。是empty

【问题讨论】:

作为初学者,请不要遵循 Swift 中建议 NSMutable... 集合类型的教程。您正在与强类型系统作斗争。将 resultArray 声明为原生 Swift Array 并尽可能具体,例如 var resultArray = [String() PS:search()函数是否运行异步任务?如果是,则不能使用返回值。 tableViews 的行为是正确的。根据您的代码,结果数组始终为空,您只需在 viewWillAppear 中重新加载 tableView,这不是必需的。请提供搜索方法上的代码以便更好地为您提供帮助 感谢您的慷慨建议。终于发现忘记给tableView分配DataSource和Delegate了。好尴尬....... 我使用 NSMutableArray 因为数据非常复杂。我刚刚为这个数组建立了一个模型。 class scoreModel: NSObject XXXXXX。无论如何,谢谢你们帮助我。你真好! (英语不是我的母语,如有错误请见谅。) 【参考方案1】:

更改 resultArray 后必须重新加载数据。

@IBAction func btnSearch(_ sender: Any) 
  resultArray = search() 
  scoreTableView.reloadData()

【讨论】:

重新加载数据不起作用。可悲的是,当我输入另一个 inputText 时,func search() 中的 resultArray 也没有改变。它只是在 debugDescription() 中显示了第一个。 在函数 btnSearch 上使用断点来确定这个方法是否被调用。如果没有,请尝试再次将其连接到您的按钮。 感谢您的慷慨建议。我通过将 DataSource 和 Delegate 的分配添加到 tableView 来修复。好尴尬.......【参考方案2】:

更新:我只是忘记将 DataSource 和 Delegate 分配给 tableView。我从情节提要手动构建了 tableview。

而且我误解了,如果我在情节提要中分配数据源和委托,则需要分配。

override func viewDidLoad() 
    super.viewDidLoad()
    scoreTableView.dataSource = self
    scoreTableView.delegate = self

【讨论】:

以上是关于如何将@IBAction func 数据放入 TableView?的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用@IBAction func时UI没有及时更新?

如何将复杂的代码顺序放入模型中?

如何将 NSmutablearray 放入 NSString [关闭]

golang 将func放入go中的地图中

将 Class 结果放入第二个 viewController

仅将 IBAction 应用于单个单元格