내가 이루고 싶은 것은 무엇입니까? 나는 2 UITableViewController : AddCardVC
와 ListDeckController
. 선택한 덱 ListDeckController
을 AddCardVC
다음 updateUI
으로 전달하고 싶습니다 .AddCardVC
내 코드 : ( Swift 5
, iOS 13
)
ListDeckController.swift :
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
if let addCardVC = storyboard.instantiateViewController(withIdentifier: "AddCard") as? AddCardVC {
if let deck = allDecks?[indexPath.row] {
addCardVC.selectedDeck = deck
}
}
self.navigationController?.popViewController(animated: true)
}
AddCardVC.swift :
var selectedDeck: Deck?
{
didSet {
viewWillAppear(true)
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let deck = selectedDeck {
//Update UI
self.chooseDeckButton.setTitle(deck.name, for: .normal)
print(chooseDeckButton.titleLabel?.text ?? "")
self.tableView.reloadData()
}
}
무슨 일이야?
에서 데크를 선택 AddCardVC
하면 콘솔 chooseDeckButton.titleLabel?.text = "My Deck"
이 내가 원하는 것을 인쇄합니다 . 하지만 UI의 버튼 제목은 "덱 선택"입니다. 콘솔 이미지 UI의 버튼
그렇다면 내 경우에는 setButtonTitle이 UI에 표시되지 않는 이유는 무엇입니까?
시간 내 주셔서 감사합니다
먼저 DeckDelegate 용 프로토콜을 생성합니다.
protocol SelectedDeckDelegate {
func didSelectDeck(selectedDeck : Deck)
}
이제 ListDeckController.swift에서 대리자를 구현하십시오.
var deckDelegate : SelectedDeckDelegate?
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
{
if let deck = allDecks?[indexPath.row] {
deckDelegate?.didSelectDeck(selectedDeck: deck)
self.navigationController?.popViewController(animated: true)
} else {
print("deck is empty")
}
}
그리고 AddCardVC에서 ListDeckController로 이동할 때 대리자를 self에 할당하십시오.
// Make AddCardVC conform to SelectedDeckDelegate
class AddCardVC : UIViewController, SelectedDeckDelegate {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let deck = selectedDeck {
//Update UI
self.chooseDeckButton.setTitle(deck.name, for: .normal)
print(chooseDeckButton.titleLabel?.text ?? "")
self.tableView.reloadData()
}
}
// assign the delegate to self here
@IBAction func selectDeckBtnAction(_ sender : Any) {
let vc = storyboard.instantiateViewController(withIdentifier: "ListDeckController") as? ListDeckController
vc.deckDelegate = self
self.navigationController?.pushViewController(vc, animated: true)
}
// this will get called whenever selectedDeck is updated from ListDeckController
func didSelectDeck(selectedDeck: Deck) {
self.selectedDeck = selectedDeck
chooseDeckButton.setTitle(selectedDeck.name , for: .normal)
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다