我试图通过将UITableViewDataSource(和Delegate)移动到一个单独的类来清理我拥挤的ViewController。
虽然DataSource在ViewController中(见下文),但它运行良好
class ViewController: UIViewController, UITableViewDataSource{
//MARK: Properties
@IBOutlet weak var myTableView: UITableView!
let cellIdentifier = "myTableViewCell"
let myArray = ["Label one", "Label two", "Label three"]
override func viewDidLoad()
{
super.viewDidLoad()
myTableView.dataSource = self
}
override func didReceiveMemoryWarning()
{super.didReceiveMemoryWarning()}
//MARK: TableViewDataSource
func numberOfSectionsInTableView(tableView: UITableView) -> Int
{return 1}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{return myArray.count}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! myTableViewCell
cell.myLabel.text = myArray[indexPath.row]
return cell
}
}
使用myTableViewCell类
class myTableViewCell: UITableViewCell{
@IBOutlet weak var myLabel: UILabel!
override func awakeFromNib()
{super.awakeFromNib()}
override func setSelected(selected: Bool, animated: Bool)
{super.setSelected(selected, animated: animated)}
}
这样可以正常工作,并使用myArray中字符串填充的标签填充基本表。
然而,当我将DataSource移动到它自己的类时,如下所示,它不起作用
的ViewController
class ViewController: UIViewController
{
//MARK: Properties
@IBOutlet weak var myTableView: UITableView!
override func viewDidLoad()
{
super.viewDidLoad()
myTableView.dataSource = myDataSource()
}
override func didReceiveMemoryWarning()
{super.didReceiveMemoryWarning()}
}
这里是myDataSource类
class myDataSource: NSObject, UITableViewDataSource
{
let cellIdentifier = "myTableViewCell"
let myArray = ["Label one", "Label two", "Label three"]
//MARK: TableViewDataSource
func numberOfSectionsInTableView(tableView: UITableView) -> Int
{return 1}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{return myArray.count}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! myTableViewCell
cell.myLabel.text = myArray[indexPath.row]
return cell
}
}
(myTableViewCell保持不变)
这个设置只输出一个空表,即使我所做的只是将代码从ViewController复制粘贴到myDataSource。我错过了什么? (除了代表之外。我稍后会处理这个问题,首先我需要找到数据源的问题)。 我是一个快速的新秀,所以我真的很难理解我在这里出错的地方。任何帮助都将非常感激。如果你能在回答中记得我刚刚开始,那么尽量不要向我提出太多复杂的概念而不解释。谢谢
答案 0 :(得分:3)
您的数据源中的代码可能永远不会被调用,因为您的数据源不会被表myTableView.dataSource = myDataSource()
保留,因此基本上会立即释放。要解决此问题,请将数据源保留为属性。
答案 1 :(得分:0)
将单独的类声明为function toggleMenu() {
if($('#menu').hasClass('.mm-opened')) {
API.close();
} else {
API.open();
}
}
// alternative
function toggleMenu() {
if($('#menu').is(':visible')) {
API.close();
} else {
API.open();
}
}
类
ViewController
我正在使用也总是在扩展声明中委托方法,但在与主类
相同的文件中