2017-01-14 8 views
1

Я новичок в Swift, и у меня есть эта интересная проблема.Ячейка, которую я нажимаю в своем столе, отправляет ярлык для ранее нажатой ячейки

Я пытаюсь отправить ярлык ячейки таблицы, когда перейду к другому контроллеру представления, где я его распечатаю. Проблема в том, что она печатает ярлык ячейки, которая была нажата до этого нажатия.

Вот код в главном контроллере представления, который проходит ярлык:

// When a user taps on a cell on the tableView, it asks for a tag name for that image. 
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    print("Cell \(indexPath) selected") 

    // Get cell image. 
    let indexPath = tableView.indexPathForSelectedRow 
    let currentCell = tableView.cellForRow(at: indexPath!) as! ImageFeedItemTableViewCell 
    imagePass = currentCell.itemImageView 
    labelPass = currentCell.itemTitle 

} 


override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    // Send image to GreetingViewController. 
    if segue.identifier == "GoToGreeting" { 
     var greetingvc = segue.destination as! GreetingViewController 
     greetingvc.passedImage = imagePass 
     greetingvc.passedLabel = labelPass 

    } 
} 

и здесь соответствующий код в контроллере представления, который принимает переданную ярлык:

var passedImage: UIImageView? = nil 
var passedLabel: UILabel? = nil 


override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view. 

    print(passedLabel?.text) 

} 

Любая помощь будет оценена.

+0

где ваш метод «выполнить segue»? – aircraft

+0

Я удалил его, потому что он отправлял segue дважды. –

ответ

0

Я считаю, что prepare(for:sender:) получает вызов до tableView(_:didSelectRowAt:), когда вы подключаете этот сеанс в раскадровке.

Что вы можете сделать, просто используйте параметр sender метода prepare(for:sender:), чтобы получить необходимую информацию в нужное время. Когда segue запускается ячейкой, как кажется в вашем случае, тогда эта ячейка будет sender, переданной в метод prepare. Итак, вы можете сделать что-то вроде:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    // Send image to GreetingViewController. 
    if let cell = sender as? ImageFeedItemTableViewCell, segue.identifier == "GoToGreeting" { 
     var greetingvc = segue.destination as! GreetingViewController 
     greetingvc.passedImage = cell.itemImageView 
     greetingvc.passedLabel = cell.itemTitle 
    } 
} 
+0

Это отлично поработало! Я не думал о порядке таких операций. Все еще привыкаешь к объектно-ориентированным вещам. –