【问题标题】:Unable to reload tabledata from UISegmentedControl无法从 UISegmentedControl 重新加载表数据
【发布时间】:2015-10-06 14:41:06
【问题描述】:

我想根据分段控件的选择在 tableview 中显示不同的数据。下面是我的代码,它只显示第一个 TABLEVIEW DATASOURCE,并且由于某种原因分段控制不起作用。

@IBOutlet weak var segementedControlAction: UISegmentedControl!


var Names = ["Name1", "Name2","Name3","Name4"]
var Images =  ["1.jpg","2.jpg","5.jpg","8.jpg"]
var set =  ["14","15","16","17"]

var Names1 = ["Name5", "Name6","Name7","Name8"]
var Images1 =  ["6.jpg","4.jpg","7.jpg","9.jpg"]
var set1 =  ["4","5","6","7"]

var Names2 = ["Name9", "Name12","Name13","Name14"]
var Images2 =  ["11.jpg","21.jpg","51.jpg","81.jpg"]
var set2 =  ["114","115","116","117"]


func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    var count: Int = 0
    tableView.layer.cornerRadius = 10
    tableView.layer.masksToBounds = true

    if (tableView == self.d1) {
        print("Monday")
        count = self.Names.count
    }
    else if (tableView == self.d2) {
        print("Tuesday")
        count = self.Names1.count
    }
    else if (tableView == self.d3) {
        print("Wednesday")
        count = self.Names2.count
    }

    return count
}


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) ->
UITableViewCell {

    let cellIdentifier = "Cell"
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath:
        indexPath) as! CustomTableViewCell

if segementedControlAction.selectedSegmentIndex == 0 {
    cell.nameLabel.text = Names[indexPath.row]
    cell.thumbnailImageView.image = UIImage(named: Images[indexPath.row])
    cell.setLabel.text = set[indexPath.row]

    }

else if segementedControlAction.selectedSegmentIndex == 1 {

cell.nameLabel.text = Names1[indexPath.row]
cell.thumbnailImageView.image = UIImage(named: Images1[indexPath.row])
cell.setLabel.text = set1[indexPath.row]
    }


else {segementedControlAction.selectedSegmentIndex == 2

cell.nameLabel.text = Names2[indexPath.row]
cell.thumbnailImageView.image = UIImage(named: Images2[indexPath.row])
cell.setLabel.text = set2[indexPath.row]

    }

    return cell }

@IBAction func segementedControlAction(sender: UISegmentedControl) {
 switch sender.selectedSegmentIndex {

case 0:
self.d1.hidden = false
self.d2.hidden = true
self.d3.hidden = true

self.d1.reloadData()

case 1:

    self.d1.hidden = true
    self.d2.hidden = false
    self.d3.hidden = true
    self.d2.reloadData()

case 2:

    self.d1.hidden = true
    self.d2.hidden = true
    self.d3.hidden = false
    self.d3.reloadData()



default:
    self.d1.hidden = false
    self.d2.hidden = true
    self.d3.hidden = true

    self.d1.reloadData()
    break;

}

【问题讨论】:

  • 你是说segementedControlAction: 没有被触发吗?或者它被触发但表格视图没有重新加载正确的数据?我相信d1d2d3 这是表格视图 - 为什么你有 3 个表格?您可以只有一个表并使用基于分段控制的数据重新加载它。
  • 为什么有 3 个表视图?你只需要 1 个。
  • 是的,segementedControlAction 没有被触发,我需要不同的表来从分段控制中的不同选择中加载。

标签: ios swift uitableview swift2 uisegmentedcontrol


【解决方案1】:

请确保 segementedControlAction 从您的视图控制器正确连接。可能尝试以下步骤:

  1. 删除之前连接的IBAction
  2. 将您的 segmentedControl 连接到 Files Owner。
  3. 连接您的segementedControlAction: 操作并选择“值 改变了”而不是“内部修饰”。这很重要。
  4. 打印一条语句以检查 segementedControlAction: 是否现在 触发。

【讨论】:

    【解决方案2】:

    试试这个:

    在您的 viewDidLoad 方法中,添加以下内容:

    tableView.delegate = self
    tableView.dataSource = self
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      相关资源
      最近更新 更多