[英]TableView Reload data is not calling cellForRowAtIndexPath
I am Using UITableView For Display some data. 我正在使用UITableView显示一些数据。 But I have Seperated the Datasource and Delegate Methods to another class.
但是我已经将数据源和委托方法分离到另一个类中。 So my TableViewController is not having Any delegate Methods.
所以我的TableViewController没有任何委托方法。 They are in Seperate Class.
他们在单独的班级。
So when the tableview loads for the First Time, It loads the values. 因此,当首次加载tableview时,它将加载值。 but when i use
tableView.reloadData
on a button click of a cell , It does not calls the cellForRawAtIndexPath
Method. 但是当我在单元格的按钮单击上使用
tableView.reloadData
时,它不会调用cellForRawAtIndexPath
方法。 But it calls numberOfRawsInSection
and other methods. 但是它调用
numberOfRawsInSection
和其他方法。
Here is my Controller Class 这是我的控制器班
class AdvancedSearch: UITableViewController , PopOverViewDelegate{
@IBOutlet var model: AdvancedSearchDataModel!
let dataModel = AdvancedSearchDataModel()
override func viewDidLoad() {
super.viewDidLoad()
tableView.registerNib(UINib(nibName: "AgeCell", bundle: nil), forCellReuseIdentifier: "AgeCell")
tableView.registerNib(UINib(nibName: "ExperienceCell", bundle: nil), forCellReuseIdentifier: "ExperienceCell")
tableView.registerNib(UINib(nibName: "CityCell", bundle: nil), forCellReuseIdentifier: "CityCell")
tableView.registerNib(UINib(nibName: "StateCell", bundle: nil), forCellReuseIdentifier: "StateCell")
tableView.registerNib(UINib(nibName: "DateTimeCell", bundle: nil), forCellReuseIdentifier: "DateTimeCell")
tableView.registerNib(UINib(nibName: "GenderCell", bundle: nil), forCellReuseIdentifier: "GenderCell")
tableView.registerNib(UINib(nibName: "ResultButtonCell", bundle: nil), forCellReuseIdentifier: "ResultButtonCell")
//tableView.dataSource = model
//tableView.delegate = model
tableView.separatorColor = UIColor.grayColor()
tableView.allowsSelection = false
tableView.separatorStyle = UITableViewCellSeparatorStyle.None
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
tableView.reloadData()
}
// MARK: - DropDown PopOver Delegates
func valueOfTheFieldWhenSelect(tableViewCell: UITableViewCell, value: String, indexPath: NSIndexPath) {
let data = AdvancedSearchDataModel()
data.buttonTitle = value
self.tableView.delegate = data
self.tableView.dataSource = data
self.tableView.reloadData()
}
Here is my Datasource and Delegates in Seperate Class 这是我的数据源和单独班级的代表
class AdvancedSearchDataModel: NSObject , UITableViewDataSource , UITableViewDelegate , AdvanceSearchDropDownButtonDelegate , UIPopoverPresentationControllerDelegate {
let data = ["Age","Experience","City" , "State" , "Gender" , "Date and Time"]
// set this proprty in PopOverViewDelegate method
var buttonTitle : String?
// MARK: - TableView Datasource
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("Count : \(data.count)")
return data.count + 1
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
switch indexPath.row {
case 0:
let cell = tableView.dequeueReusableCellWithIdentifier("AgeCell", forIndexPath: indexPath) as! AgeCell
applyStyleForButton(cell.selectAge)
let frame = CGRectMake(0, cell.frame.size.height - 2, cell.frame.size.width,2)
let additionalSeparator = UIView(frame: frame)
additionalSeparator.backgroundColor = UIColor.grayColor()
cell.addSubview(additionalSeparator)
if buttonTitle != nil {
cell.selectAge.setTitle(buttonTitle, forState: .Normal)
}
cell.indexPath = indexPath
cell.dropDownDelegate = self
return cell
case 1:
let cell = tableView.dequeueReusableCellWithIdentifier("ExperienceCell", forIndexPath: indexPath) as! ExperienceCell
applyStyleForButton(cell.selectExperinceBtn)
let frame = CGRectMake(0, cell.frame.size.height - 2, cell.frame.size.width,2)
let additionalSeparator = UIView(frame: frame)
additionalSeparator.backgroundColor = UIColor.grayColor()
cell.addSubview(additionalSeparator)
return cell
case 2:
let cell = tableView.dequeueReusableCellWithIdentifier("CityCell", forIndexPath: indexPath) as! CityCell
applyStyleForButton(cell.cityButton)
let frame = CGRectMake(0, cell.frame.size.height - 2, cell.frame.size.width,2)
let additionalSeparator = UIView(frame: frame)
additionalSeparator.backgroundColor = UIColor.grayColor()
cell.addSubview(additionalSeparator)
return cell
case 3:
let cell = tableView.dequeueReusableCellWithIdentifier("StateCell", forIndexPath: indexPath) as! StateCell
applyStyleForButton(cell.stateButton)
let frame = CGRectMake(0, cell.frame.size.height - 2, cell.frame.size.width,2)
let additionalSeparator = UIView(frame: frame)
additionalSeparator.backgroundColor = UIColor.grayColor()
cell.addSubview(additionalSeparator)
return cell
case 4:
let cell = tableView.dequeueReusableCellWithIdentifier("GenderCell", forIndexPath: indexPath) as! GenderCell
let frame = CGRectMake(0, cell.frame.size.height - 2, cell.frame.size.width,2)
let additionalSeparator = UIView(frame: frame)
additionalSeparator.backgroundColor = UIColor.grayColor()
cell.addSubview(additionalSeparator)
return cell
case 5:
let cell = tableView.dequeueReusableCellWithIdentifier("DateTimeCell", forIndexPath: indexPath) as! DateTimeCell
applyStyleForButton(cell.datebutton)
applyStyleForButton(cell.timeButton)
let frame = CGRectMake(0, cell.frame.size.height - 2, cell.frame.size.width,2)
let additionalSeparator = UIView(frame: frame)
additionalSeparator.backgroundColor = UIColor.grayColor()
cell.addSubview(additionalSeparator)
return cell
case 6:
let cell = tableView.dequeueReusableCellWithIdentifier("ResultButtonCell", forIndexPath: indexPath) as! ResultButtonCell
let frame = CGRectMake(0, cell.frame.size.height - 2, cell.frame.size.width,2)
let additionalSeparator = UIView(frame: frame)
additionalSeparator.backgroundColor = UIColor.grayColor()
cell.addSubview(additionalSeparator)
return cell
default:
return UITableViewCell()
}
}
// MARK: - TableView Delegates
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath.row == 5 {
return 150
}else{
return 94
}
}
// MARK: - Styling
func applyStyleForButton(button : UIButton){
button.layer.borderColor = UIColor.grayColor().CGColor
button.layer.borderWidth = 1
button.layer.cornerRadius = 5
button.backgroundColor = UIColor.clearColor()
}
// MARK: - DropDown Delegates
func openAgeDropDown(by button: UIButton, and cell: AgeCell,indexPath : NSIndexPath)
{
print("Age opened")
let tableViewController = DropDownController(style: .Plain, menuItems: ["10","20","30"],cell: cell , index: indexPath)
tableViewController.modalPresentationStyle = UIModalPresentationStyle.Popover
tableViewController.preferredContentSize = CGSizeMake(button.frame.width, button.frame.width)
// assigning the delegate in tableView to fill the textfield
tableViewController.delegate = AdvancedSearch()
let popoverPresentationController = tableViewController.popoverPresentationController
popoverPresentationController?.permittedArrowDirections = .Any
popoverPresentationController?.delegate = self
popoverPresentationController?.sourceView = button
popoverPresentationController?.sourceRect = button.bounds
UIApplication.sharedApplication().keyWindow?.rootViewController!.presentViewController(tableViewController, animated: true, completion: nil)
}
// MARK: - PopOver Delegates
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
return UIModalPresentationStyle.None
}}
Please Guide me 请引导我
The methods is not calling because everytime you are creating a new object of AdvancedSearchDataModel
. 该方法未调用,因为每次您都创建
AdvancedSearchDataModel
的新对象时。 instead this assign delegate in viewDidLoad. 相反,此分配委托在viewDidLoad中。 don't need to create new object of
AdvancedSearchDataModel
不需要创建
AdvancedSearchDataModel
新对象
in viewDidLoad
在
viewDidLoad
...
tableView.separatorColor = UIColor.grayColor()
tableView.allowsSelection = false
tableView.separatorStyle = UITableViewCellSeparatorStyle.None
tableView.delegate = self.model
tableView.dataSource = self.model
and in valueOfTheFieldWhenSelect
并在
valueOfTheFieldWhenSelect
func valueOfTheFieldWhenSelect(tableViewCell: UITableViewCell, value: String, indexPath: NSIndexPath) {
self.model.buttonTitle = value
self.tableView.reloadData()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.