切换到UITableViewController时调用方法

时间:2015-07-06 15:18:03

标签: swift ios8

我设法以编程方式切换到UITableViewController。但是,是否有一种初始方法或某种性质的东西,我可以在它切换后立即运行?无论表中是否包含数据,我都希望代码能够运行。

Swift的新手,任何帮助表示赞赏。

编辑:

更具体地说,在我的主ViewController中,我这样做:

 var next = self.storyboard?.instantiateViewControllerWithIdentifier("MyEvents") as! MyEvents
            self.presentViewController(next, animated: true, completion: nil)

据我了解,正在推送TableViewController

然后专用于TableViewController的类:

    import UIKit

class MyEvents: UITableViewController, SideBarDelegate {

    var eventList = [];
    var sideBar:SideBar = SideBar()



    required init!(coder aDecoder: NSCoder!) {
        self.init()
        sideBar = SideBar(sourceView: self.view, menuItems: ["My Events","Support","Settings"])
        sideBar.delegate = self    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return eventList.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        return basicCellAtIndexPath(indexPath)
    }

    func basicCellAtIndexPath(indexPath:NSIndexPath) -> BasicCell
    {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! BasicCell
        setCellValues(cell, indexPath: indexPath)
        return cell
    }

    func setCellValues(cell:BasicCell, indexPath:NSIndexPath)
    {
         cell.eventLabel.text = "Test Event"
         cell.acceptLabel.text = "100"
         cell.declineLabel.text = "90"
         cell.acceptSubLabel.text = "Accepts"
         cell.declineLabel.text = "Decline"
    }

    func sideBarDidSelectButtonAtIndex(index: Int)
    {
        if index == 0
        {
            println("Here!")
        }

    }

}

3 个答案:

答案 0 :(得分:2)

我认为你应该在你的问题中提供更多细节。当你说'切换'到UITableViewController时,你是说你从另一个推动这个UITableViewController它现在是你屏幕上的主要VC吗?

您需要在UITableViewController代码中实现一些方法; numberOfSections,numberOfRowsInSection,cellForRowAtIndexPath等。基本上,您需要遵守UITableViewDataSource协议(您可以在Apple的文档中查看)。

通过更多细节,我们可以为您提供更多帮助!

答案 1 :(得分:2)

如果您创建了UITableViewController的子类,则可以将任何初始化代码放入(override)方法:viewDidLoad。请参阅下面的示例,了解您需要的其他必要方法:

import UIKit

class TableViewController: UITableViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.title = "Test"
    self.navigationItem.rightBarButtonItem = self.editButtonItem()
    tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 3
}


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier("cell") as? UITableViewCell
    cell = UITableViewCell(style: .Subtitle, reuseIdentifier: "cell")

    let xrow = indexPath.row
    let xsection = indexPath.section

    println("row = \(xrow), section = \(xsection)")
    println("0: cell.textLabel?.text = \(cell!.textLabel?.text)")
    cell!.textLabel?.text = "Section = \(xsection)"
    println("1: cell.textLabel?.text = \(cell!.textLabel?.text)")
    println("0: cell.detailTextLabel?.text = \(cell!.detailTextLabel?.text)")
    cell!.detailTextLabel?.text = ("section = \(xsection), row = \(xrow)") as String!
    println("1: cell.detailTextLabel?.text = \(cell!.detailTextLabel?.text)")
    return cell!
}

}

答案 2 :(得分:0)

您可以使用viewDidAppearviewWillAppear。使用语法

override func viewWillAppear() {
super.viewWillAppear()
//Code
}

希望这有帮助!