2014-11-07 3 views
0

*** ОБНОВЛЕНО: 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) 
} 

ответ

0

Измените источник данных (transportationItems) нести struct вместо String:

struct TransportItem { 
    var label: String 
    var hidden: Bool 
} 

let transportationItems = [ 
          TransportItem(label: "Bus", hidden: true), 
          ........ 
          TransportItem(label: "Caravan", hidden: true) 
          ] 

Затем перейдите к cellForRowAtIndexPath, и сделать:

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

'self.tableView.reloadData()' немного негабаритный здесь, где была изменена только одна ячейка. Лучше использовать 'self.tableView.reloadRowsAtIndexPaths ([indexPath], withRowAnimation: .None)' – zisoft

+0

Спасибо, @EricQian. Ты указал мне в правильном направлении! Ваш код не работал для меня, но я нашел дополнительную помощь здесь: [link] (http://stackoverflow.com/questions/24663294/hiding-objects-within-uitableviewcell-ios-8-swift). Спасибо также за zisoft за ваш фрагмент. Я не знал, что вы можете просто перезагрузить одну строку. Я уверен, что это может быть полезно в будущих проектах. Я обновил свой код выше, если кто-то может найти его полезным. Кроме того, мне кажется, что мне не нужно использовать фрагмент перезагрузки, так как табличное представление сразу же обновляется после нажатия кнопки. – IWannaLearn

 Смежные вопросы

  • Нет связанных вопросов^_^