如何在单元格另一个TableView中使用TableViewDelegate和TableViewDataSource

时间:2016-09-09 12:08:36

标签: ios swift uitableview delegates

我尝试在另一个TableViewDelegate的tableView中使用TableViewDataSourcetableView。但是,cellForRowAtIndexPath没有被调用。什么是问题。

class RequesterTableViewCell: UITableViewCell, UITableViewDelegate, UITableViewDataSource {

var delegate: RequesterTableViewCellDelegate?

var serviceRequestCardItem: ServiceRequestCard?

@IBOutlet weak var tvIssues: UITableView!


override func awakeFromNib() {
    super.awakeFromNib()
    self.tvIssues.tag = tagOfIssueTableView
    self.tvIssues.delegate = self
    self.tvIssues.dataSource = self
    // Initialization code
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
}


@IBAction func bActivatedmenu(sender: AnyObject) {
    if delegate != nil {
        self.delegate?.selectedCellForDelete(self)
    }
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    var countOfIssues: Int = 0
    if let issues = serviceRequestCardItem?.getDateEquipment()?.getIssues()?.count {
        countOfIssues = issues
    }
    return countOfIssues
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier(IssueCell.reuseIdentifer(), forIndexPath: indexPath)
    let issue = serviceRequestCardItem!.getDateEquipment()?.getIssues()![indexPath.row]
    if tableView.tag == tagOfIssueTableView {
        if let lState = (cell as! IssueCell).lIssueState {
            lState.text = issue?.getIssueState()?.getName()
        }
    }
    return cell
}

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

}

//在tableView中创建单元格

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = UITableViewCell()
    let serviceRequestCardItem = serviceRequestCardArray[indexPath.row]
    var requesterCell: RequesterTableViewCell! = nil
    if tableView.tag == tagOfRequestTableView {
        cell = tableView.dequeueReusableCellWithIdentifier(RequesterTableViewCell.reuseIdentifer(), forIndexPath: indexPath)
        requesterCell = (cell as! RequesterTableViewCell)
        requesterCell.delegate = self
        requesterCell.setDataForTableView(serviceRequestCardItem)
        requesterCell.selectedCell(serviceRequestCardItem)
    }

    return cell

}

2 个答案:

答案 0 :(得分:0)

您需要创建两个与表视图相关联的变量(出口)。例如:

var tableViewOne: UITableView?
var tableViewTwo: UITableView?

例如,此方法使用如下:

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == tableViewOne {
    return 5
}

if tableView == tableViewTwo {
    return 1
}
}

使用此模式,您需要填写table view

所需的其他方法

答案 1 :(得分:0)

你可以: -

  • 在您的parentTableViewCell的noOfValues函数中设置您将在numberOfRowsInSection中返回的cellForIndexPath ..

    声明一个变量     var noOfValues : Int!

    中的RequesterTableViewCell
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {...
    
         let cell = tableView.dequeueReusableCellWithIdentifier(RequesterTableViewCell.reuseIdentifer(), forIndexPath: indexPath)
         cell.noOfValues = serviceRequestCardItem?.getDateEquipment()?.getIssues()?.count
         ...}
    

RequesterTableViewCell: -

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return noOfValues
    }  
  • 在检索到问题时重新加载数据,据我所知,return语句正在执行,甚至在您能够设置计数之前

只需更改代码中的numberOfRowsInSection: -

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
var countOfIssues: Int = 0
if let issues = serviceRequestCardItem?.getDateEquipment()?.getIssues()?.count {
    countOfIssues = issues
    tvIssues.reloadData() 
      }
return countOfIssues
}