*** ОБНОВЛЕНО: Yay! он работает сейчас! *** Я много часов оглядывался, но не нашел точно, что мне нужно, чтобы понять это. Есть несколько ответов там, используя объективный c, но я тестирую Swift, и я не могу заставить код переводить. (Ставка, вы не можете сказать, насколько я к этому отношусь!) У меня есть простой tableView
, который показывает список типов транспорта из массива. Когда каждая ячейка нажата, появляется предупреждение, чтобы спросить пользователя, использовали ли они этот вид транспорта раньше. Они могут ответить «да» или «нет». Если да, то я хотел бы отобразить одну из ярлыков в моем tableView
. Похоже, это должно быть так просто, но я вырываю волосы. Настольная система отлично работает, предупреждения работают отлично; Я просто не могу показать ярлык в своем tableView
. Я решил, что мне нужно будет перезагрузить tableView
, но я продолжаю получать ошибки, говоря, что то, что я делаю, не рекомендуется.как пройти boolean из alertview в пользовательскую ячейку tableview в swift
Эти выходы в моем пользовательском классе мобильный:
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)
}
'self.tableView.reloadData()' немного негабаритный здесь, где была изменена только одна ячейка. Лучше использовать 'self.tableView.reloadRowsAtIndexPaths ([indexPath], withRowAnimation: .None)' – zisoft
Спасибо, @EricQian. Ты указал мне в правильном направлении! Ваш код не работал для меня, но я нашел дополнительную помощь здесь: [link] (http://stackoverflow.com/questions/24663294/hiding-objects-within-uitableviewcell-ios-8-swift). Спасибо также за zisoft за ваш фрагмент. Я не знал, что вы можете просто перезагрузить одну строку. Я уверен, что это может быть полезно в будущих проектах. Я обновил свой код выше, если кто-то может найти его полезным. Кроме того, мне кажется, что мне не нужно использовать фрагмент перезагрузки, так как табличное представление сразу же обновляется после нажатия кнопки. – IWannaLearn