Uitableview 如何在swift中将布尔值从alertview传递到自定义tableview单元格
***更新:耶!现在可以了***我已经找了几个小时了,但还没有找到我需要弄清楚的东西。使用objective c有一些答案,但我正在尝试Swift,似乎无法让代码进行翻译。(我打赌你说不出我有多新!)我有一个简单的Uitableview 如何在swift中将布尔值从alertview传递到自定义tableview单元格,uitableview,swift,ios8,alertview,textlabel,Uitableview,Swift,Ios8,Alertview,Textlabel,***更新:耶!现在可以了***我已经找了几个小时了,但还没有找到我需要弄清楚的东西。使用objective c有一些答案,但我正在尝试Swift,似乎无法让代码进行翻译。(我打赌你说不出我有多新!)我有一个简单的tableView,它显示了一个数组中的运输类型列表。当按下每个单元格时,会弹出一个警报,询问用户以前是否使用过此类交通工具。他们可以回答“是”或“否”。如果答案是“是”,则我希望在我的表格视图中取消隐藏其中一个标签。看起来应该很简单,但我真的快疯了。tableview工作正常,警报工
tableView
,它显示了一个数组中的运输类型列表。当按下每个单元格时,会弹出一个警报,询问用户以前是否使用过此类交通工具。他们可以回答“是”或“否”。如果答案是“是”,则我希望在我的表格视图中取消隐藏其中一个标签。看起来应该很简单,但我真的快疯了。tableview工作正常,警报工作正常;我似乎无法在我的表视图中取消隐藏标签。我想我需要在某个地方重新加载tableView
,但我不断收到错误消息,说我所做的事情不被推荐
以下是我的自定义单元类中的插座:
class TransportCell: UITableViewCell {
@IBOutlet weak var transportationTitleLabel: UILabel!
@IBOutlet weak var typeLabel: UILabel!
@IBOutlet weak var transportationImage: UIImageView!
}
这是我的tableviewcontroller:
class TransportationTableViewController: UITableViewController {
struct TransportItem
{
var label: String
var subTitle: String
var isHidden: Bool
}
let TransportationItems = [TransportItem(label: "Bus", subTitle: "I have used this type before.", isHidden: true),
TransportItem(label: "Helicopter", subTitle: "I have used this type before.", isHidden: false),
TransportItem(label: "Truck", subTitle: "I have used this type before.", isHidden: true),
TransportItem(label: "Boat", subTitle: "I have used this type before.", isHidden: true),
TransportItem(label: "Bicycle", subTitle: "I have used this type before.", isHidden: true),
TransportItem(label: "Motorcycle", subTitle: "I have used this type before.", isHidden: true),
TransportItem(label: "Plane", subTitle: "I have used this type before.", isHidden: true),
TransportItem(label: "Train", subTitle: "I have used this type before.", isHidden: true),
TransportItem(label: "Car", subTitle: "I have used this type before.", isHidden: true),
TransportItem(label: "Scooter", subTitle: "I have used this type before.", isHidden: true),
TransportItem(label: "Caravan", subTitle: "I have used this type before.", isHidden: true)]
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - Table view data source
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return TransportationItems.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell:TransportCell = tableView.dequeueReusableCellWithIdentifier("transportCell", forIndexPath: indexPath) as TransportCell
var item = TransportationItems[indexPath.row]
cell.transportationTitleLabel.text = item.label
cell.typeLabel.text = item.subTitle
cell.typeLabel.hidden = item.isHidden
var imageName = UIImage(named:item.label)
cell.transportationImage.image = imageName
return cell
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
var item = self.TransportationItems[indexPath.row]
let alert = UIAlertController(title: "Used this transport?", message: "You selected \(item.label)", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "No", style: UIAlertActionStyle.Cancel, handler: nil))
alert.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.Default, handler: { alertAction in
println(item.label)
println(item.subTitle)
var customCell = self.tableView.cellForRowAtIndexPath(indexPath) as TransportCell
customCell.typeLabel.hidden = false
}))
self.presentViewController(alert, animated: true, completion: nil)
}
修改数据源(transportationItems
)以携带struct
,而不是String
:
struct TransportItem {
var label: String
var hidden: Bool
}
let transportationItems = [
TransportItem(label: "Bus", hidden: true),
........
TransportItem(label: "Caravan", hidden: true)
]
然后转到cellforrowatinexpath
,然后执行以下操作:
var item = transportationItems[indexPath.row]
cell.typeLabel?.text = item.label
cell.typeLabel?.hidden = item.hidden
最后:
// THIS IS WHERE YOU LOST
// REMOVE THE CODE YOU HAVE, AND DO THIS
var item = self.transportationItems[indexPath.row]
item.hidden = false
self.tableView.reloadData()
self.tableView.reloadData()
在这里有点过大,只更改了一个单元格。最好使用self.tableView.reloadrowsatindexpath([indexath],with rowanimation:.None)
谢谢,@EricQian。你给我指明了正确的方向!您的代码不适用于我,但我在此处找到了一些其他帮助:。还感谢zisoft提供您的代码片段。我不知道你可以只重新加载一行。我相信这会对未来的项目有所帮助。我已经更新了上面的代码,以防其他人发现它有帮助。而且,似乎我不需要使用任何一个重载代码段,因为按下按钮后tableview会立即更新。