简体   繁体   English

弹出式窗口中的Swift Tableview不显示数据

[英]Swift tableview in popover doesn't show data

I am trying to setup a popover view containing a textfield and a tableview, but I couldn't make the tableview to show the data. 我正在尝试设置一个包含文本字段和表格视图的弹出视图,但是我无法使表格视图显示数据。 It would be much appreciated if you could help me on this. 如果您能在此方面帮助我,将不胜感激。

  1. On the main ViewController, I put a label to trigger the segue of popover, 在主ViewController上,我放置了一个标签来触发弹出框的顺序,

     import UIKit class ViewController: UIViewController, UIPopoverPresentationControllerDelegate { @IBOutlet weak var textField: UITextField! 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. } @IBAction func popover(sender: AnyObject) { self.performSegueWithIdentifier("ShowDetails", sender: self) } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "ShowDetails" { if let controller = segue.destinationViewController as? UIViewController { controller.popoverPresentationController!.delegate = self controller.preferredContentSize = CGSize(width: 320, height: 50) } } } func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { return .None } } 
  2. A PopoverCell is setup for the prototype cell, 为原型单元设置了PopoverCell,

      import UIKit class PopoverCellTableViewCell: UITableViewCell { @IBOutlet weak var AreaCellLabel: UILabel! override func awakeFromNib() { super.awakeFromNib() // Initialization code } override func setSelected(selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state } } 
  3. A PopoverControllerView is set for the popover itself. 为弹出框本身设置一个PopoverControllerView。

     import UIKit class PopoverViewController: UIViewController, UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate { var areas = [Area]() // @IBOutlet weak var NewArea: UITextField! // @IBOutlet weak var SaveNewArea: UIButton! @IBOutlet weak var subtableView: UITableView! override func viewDidLoad() { subtableView.dataSource = self subtableView.delegate = self super.viewDidLoad() LoadsampleArea() // Do any additional setup after loading the view. } func LoadsampleArea () { let area1 = Area(AreaName:"Moountain")! let area2 = Area(AreaName:"ByHill")! let area3 = Area(AreaName:"Yard")! areas += [area1, area2, area3] } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 1 } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return areas.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // Table view cells are reused and should be dequeued using a cell identifier. let cellIdentifier = "AreaCell" let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! PopoverCellTableViewCell let area = areas[indexPath.row] cell.AreaCellLabel.text = area.AreaName dismissViewControllerAnimated(true, completion:nil) return cell } } 
  4. and a simple data file to put the data. 和一个简单的数据文件来放置数据。

     import UIKit class Area { var AreaName: String init? (AreaName: String) { self.AreaName = AreaName if AreaName.isEmpty { return nil } } } 

Where is your UITableView object in your PopoverViewController class ? 您的PopoverViewController类中的UITableView对象在PopoverViewController I can't see any reference to it. 我看不到任何参考。

Maybe your didn't copy-paste it since the textfield is commented too, in this case I'll suggest to check if the delegate an datasource are set property. 也许您也没有复制粘贴它,因为文本字段也被注释了,在这种情况下,我建议您检查委托数据源是否为set属性。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM