Я вытаскиваю свои волосы, пытаясь заставить эту делегацию работать в Swift для приложения, над которым я работаю.Использование делегата для передачи var
У меня есть два файла: CreateEvent.swift
и ContactSelection.swift
, где первый звонит последнему.
CreateEvent
'содержание s являются:
class CreateEventViewController: UIViewController, ContactSelectionDelegate {
/...
var contactSelection: ContactSelectionViewController = ContactSelectionViewController()
override func viewDidLoad() {
super.viewDidLoad()
/...
contactSelection.delegate = self
}
func updateInvitedUsers() {
println("this finally worked")
}
func inviteButton(sender: AnyObject){
invitedLabel.text = "Invite"
invitedLabel.hidden = false
toContactSelection()
}
/...
func toContactSelection() {
let contactSelection = self.storyboard?.instantiateViewControllerWithIdentifier("ContactSelectionViewController") as ContactSelectionViewController
contactSelection.delegate = self
self.navigationController?.pushViewController(contactSelection, animated: true)
}
ContactSelection
' s содержание:
protocol ContactSelectionDelegate {
func updateInvitedUsers()
}
class ContactSelectionViewController: UITableViewController {
var delegate: ContactSelectionDelegate?
override func viewDidLoad() {
super.viewDidLoad()
self.delegate?.updateInvitedUsers()
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
// Stuff
self.delegate?.updateInvitedUsers()
}
}
Что я делаю неправильно? Я все еще новичок и не совсем понимаю эту тему, но после очистки Интернета я не могу найти ответа. Я использую кнопку Back
, доступную в панели навигации, чтобы вернуться к моему CreateEvent
.
Я исправил это предложением. Я добавил в то, что я сделал с моим кодом выше, но я хотел бы изменить его больше. Если я прокомментирую 'let contactSelection = self.Story .....' и использую определенный 'var contactSelection', объявленный ранее, он сбрасывается при нажатии на представление. – rusty
Это, вероятно, потому, что вы не можете просто создать экземпляр контроллера представления без использования раскадровки, так как ни один из точек не будет существовать. Вам лучше делать и нажимать новый каждый раз, а также передавать ссылку в качестве части методов делегата. Я отредактирую ответ – jrturton
Спасибо, что вернулись ко мне.Я отмечаю вас как ответ, потому что я решил свою проблему, я еще не пробовал новое редактирование, так как я работаю над другой частью моего проекта, но когда-нибудь снова будет стабильным - я тоже отчитаюсь чтобы убедиться, что это работает :) Спасибо! – rusty