2016-10-28 56 views
0

我正在使用UITableView来显示一些数据。但是我已经将数据源和委托方法分离到另一个类。所以我的TableViewController没有任何委托方法。他们在独立班。TableView重新加载数据未调用cellForRowAtIndexPath

因此,当tableview加载第一次,它加载的值。但是当我使用tableView.reloadData单击某个单元格的按钮时,它不会调用cellForRawAtIndexPath方法。但它调用numberOfRawsInSection和其他方法。

这里是我的控制器类

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() 

} 

这是我的数据源和委托的独立

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 
}} 

请指导我

+0

创建的AdvancedSearchDataModel

新对象,什么是使用多个笔尖,而不是方便直接设计的所有细胞目标表的原因视图? – vadian

+0

我有大量的自定义单元格。所以在TableViewController本身没有可用的空间。这就是为什么我通过笔尖加载他们 – Darshana

回答

1

方法不打电话,是因为每次你创建一个AdvancedSearchDataModel的新对象。而是在viewDidLoad中分配委托。不需要viewDidLoad

... 
tableView.separatorColor = UIColor.grayColor() 
tableView.allowsSelection = false 
tableView.separatorStyle = UITableViewCellSeparatorStyle.None 
tableView.delegate = self.model 
tableView.dataSource = self.model 

valueOfTheFieldWhenSelect

​​
+0

我会尽力让你知道@sahil。 thanx很多 – Darshana

+1

好吧,希望它能工作。 – Sahil

+0

这是一个错误。告诉self.model为零 – Darshana

相关问题