我有一个包含segmentedControl的自定义UITableViewCell。这个segmentedControl假设控制第二个单元格。当segmentedControl中的索引发生更改时,它应切换到另一个自定义单元格。我该怎么做这样的事情?我已尝试在viewController中实现IBAction,但后来我无法将其连接到xib文件中的segmentedControl。如果我将该方法放在segmentedViewCell中,那么我就无法更改细胞子类。我怎样才能获得这个?
这是一个小插图。 segmentedControl和底部视图位于不同的单元格中。
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
if indexPath.row == 0 {
let cell = tableView.dequeueReusableCellWithIdentifier("ImageViewCell", forIndexPath: indexPath) as ImageViewCell
cell.itemImage.image = itemFile
cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0)
cell.selectionStyle = UITableViewCellSelectionStyle.None
return cell
} else if indexPath.row == 1 {
let cell = tableView.dequeueReusableCellWithIdentifier("UtilityViewCell", forIndexPath: indexPath) as UtilityViewCell
cell.titleLabel.text = itemTitle
cell.selectionStyle = UITableViewCellSelectionStyle.None
cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0)
return cell
} else if indexPath.row == 2 {
let cell = tableView.dequeueReusableCellWithIdentifier("DescViewCell", forIndexPath: indexPath) as DescViewCell
cell.selectionStyle = UITableViewCellSelectionStyle.None
cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0)
return cell
}
return nil
}
答案 0 :(得分:2)
这是一步一步的。在项目的故事板中,创建一个UITableViewController
场景。在其中添加UITableViewCell
,如下图所示。将您的第一个单元格样式更改为“自定义”,并添加一个UISegmentedControl
,其中包含非模糊的自动布局约束。
在设置代码之前,
UITableViewController
场景设置了类
“TableViewController”。UITableView
选择“原型单元格”和“分组表格样式”。UISegmentedControl
视图标记设置为1(参见图片)。UISegmentedControl
的单元格具有
其标识符设置为“SegmentCell”。最后,您的UITableViewController
类文件将包含以下代码:
import UIKit
class TableViewController: UITableViewController {
var segment = 0
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
func segmentAction(sender: UISegmentedControl) {
switch sender.selectedSegmentIndex {
case 0:
segment = 0
case 1:
segment = 1
case 2:
segment = 2
default:
break
}
tableView.reloadData()
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell: UITableViewCell!
if indexPath.row == 0 {
cell = tableView.dequeueReusableCellWithIdentifier("SegmentCell", forIndexPath: indexPath) as UITableViewCell
cell.selectionStyle = .None //if necessary
let segmentControl = cell.viewWithTag(1) as UISegmentedControl
segmentControl.selectedSegmentIndex = segment
segmentControl.addTarget(self, action: "segmentAction:", forControlEvents: .ValueChanged)
} else {
switch segment {
case 0:
cell = tableView.dequeueReusableCellWithIdentifier("CellZero", forIndexPath: indexPath) as UITableViewCell
case 1:
cell = tableView.dequeueReusableCellWithIdentifier("CellOne", forIndexPath: indexPath) as UITableViewCell
case 2:
cell = tableView.dequeueReusableCellWithIdentifier("CellTwo", forIndexPath: indexPath) as UITableViewCell
default:
break
}
}
return cell
}
}
答案 1 :(得分:0)
好的,这可能需要一次迭代,直到我更好地了解你的需要。
这是从一些闪存卡的演示项目,我使用分段控制来决定显示所有历史游戏或只是某种类型(加法,减法等)我必须处理的问题把分段控制。桌子内或桌子上方。在我的情况下,表中的问题是每次更改后视图重新加载。
但我确实使用分段控制来改变标题和单元格内容。
所以我可以发布所有这些的代码,或者我可以为表格单元格中的分段控件创建一个简短的演示代码(不确定它将如何发挥)。
答案 2 :(得分:0)
覆盖func numberOfSections(在intableView:UITableView中) - > Int { 返回1 }
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
func segmentAction(_ sender: UISegmentedControl) {
switch sender.selectedSegmentIndex {
case 0:
segment = 0
case 1:
segment = 1
case 2:
segment = 2
default:
break
}
tableView.reloadData()
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell: UITableViewCell!
if indexPath.row == 0 {
cell = tableView.dequeueReusableCell(withIdentifier: "SegmentCell", for: indexPath as IndexPath) as UITableViewCell
// cell.selectionStyle = .none //if necessary
let segmentControl = cell.viewWithTag(1) as! UISegmentedControl
segmentControl.selectedSegmentIndex = segment
segmentControl.addTarget(self, action: #selector(JobReportTableViewController.segmentAction(_:)), for: .valueChanged)
} else {
switch segment {
case 0:
cell = tableView.dequeueReusableCell(withIdentifier: "CellZero", for: indexPath as IndexPath) as UITableViewCell!
case 1:
cell = tableView.dequeueReusableCell(withIdentifier: "CellOne", for: indexPath as IndexPath) as UITableViewCell!
case 2:
cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath as IndexPath)as UITableViewCell!
default:
break
}
}
return cell
}
}