UIViewController 内的 UITableView 没有响应(Swift 3.0)
Posted
技术标签:
【中文标题】UIViewController 内的 UITableView 没有响应(Swift 3.0)【英文标题】:UITableView inside of UIViewController not responding (Swift 3.0) 【发布时间】:2016-10-03 20:28:36 【问题描述】:我在UIViewController
中实现了UITableView
。我创建了一个名为HomePageTableView
的自定义类UITableView
,并在情节提要中引用了它。下面是HomePageTableView
和HomePageViewController
的代码
主页视图控制器:
import Foundation
import UIKit
class HomePageViewController: UIViewController
@IBOutlet var tableView: HomePageTableView!
override func viewDidLoad()
super.viewDidLoad()
tableView.reloadData()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
主页表视图:
class HomePageTableView: UITableView, UITableViewDelegate, UITableViewDataSource
var items: [String] = ["Item1", "Item2", "Item3"]
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return self.items.count;
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell:UITableViewCell = self.dequeueReusableCell(withIdentifier: "cell1")! as UITableViewCell
cell.textLabel?.text = self.items[indexPath.row]
return cell
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
print("You selected cell #\(indexPath.row)!")
当我尝试运行它时,tableview 会加载一个空的 tableview,并且无法选择任何单元格或显示任何内容。我根本无法选择任何单元格或与 tableview 交互。我想知道如何将数据加载到这个 tableview 中并对其进行配置,以便我可以与之交互。我考虑将 tableview 代码放入视图控制器,但将 tableview 放在自己的类中会更有用。
提前致谢!!
【问题讨论】:
tableView.datasource = tableView 我会在哪里添加这个? HomePageTableView 没有成员数据源 数据源代码既不属于视图控制器类,也不属于视图类。它属于它自己的类。 为了简单起见,现在我只是将数据放入 HomePageTableView 中的一个数组中。我下载了一个在 UIViewController 中实现所有内容的项目,它运行良好。当我删除 tableview 代码并将其放入自己的 UITableView 文件时,它只是不起作用。我记得这就是你在 Obj-c 中的做法 @SulaimanMajeed,这如何简化任何事情?表格视图旨在用于继承方式的组合,而不是子类化。不在 Objective-C 中,不在 Swift 中。在 7 年的 ios 开发中,我没有遇到过一个单一的用例,其中子类化 UITableView 是正确的选择。而在 ViewController 中实现这一点只是一个不会消失的坏习惯,因为它会被没有经验的开发人员一遍又一遍地漫不经心地复制。 【参考方案1】:您可以简单地执行此操作。如果所有连接都正常,我认为它应该可以工作。
class HomePageViewController: HomePageTableView
override func viewDidLoad()
super.viewDidLoad()
【讨论】:
HomePageViewController 是 UIViewController,而不是 HomePageTableView。它只包含和控制 HomePageTableView 对不起,我误解了你的问题。好吧,那你在 HomePageTableView 中创建一个 tableview 的实例。然后创建一个简单地执行 tableview.reload() 的函数。然后继承这个类以及 HomePageViewController 中的 UIViewController 并简单地调用该函数。以上是关于UIViewController 内的 UITableView 没有响应(Swift 3.0)的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell 中的 UIButton 使用 Storyboard 执行对另一个 UIViewController 的 Segue
从 uiviewcontroller 操作 uicollectionviewcell 内的 uicollectionview
根 ViewController 内的 UIViewController 不旋转
在 UINavigationController 内的 UIViewController 内加载 UITableViewController