我有一個類似於此的子視圖: item selector。iOS使用模態視圖控制器的返回值
ItemSelector:
class ItemSelector: UIView {
weak var delegate: ItemSelectorDelegate?
// ...
func addButtonPressed(button: UIButton) {
// called when "+" button is pressed
let confirmed = delegate?.addItemOrNot() // delegate function
if confirmed! { /* update ui */ }
}
}
MainViewController:
class MainViewController: UIViewController, ItemSelectorDelegate {
@IBOutlet weak var itemSelector: ItemSelector!
override func viewDidLoad() {
super.viewDidLoad()
itemSelector.delegate = self
}
func addItemOrNot() -> Bool {
performSegueWithIdentifier("AddOrNot", sender: self)
return ??? // results from modal view controller
}
}
當按下 「+」 按鈕,含有模態的視圖控制器 「是」/ 「否」 按鈕將顯示。如果用戶選擇「是」,則addItemOrNot()函數將返回true;否則它返回false,視圖將保持不變。我已經把控制器連接起來了。
如何根據我在模態視圖控制器中按哪個按鈕返回布爾值?我該如何使用addItemOrNot()函數中的返回值?
感謝您的幫助,但我仍然有一個問題。 正如你所說,我已經將我的根VC設置爲委託,並且我在根VC中使用了一個變量來存儲要返回的布爾值。 但是,addItemOrNot()函數有沒有辦法讓模態VC中的結果發生變化並在接收到值後解除該值? –
如果你執行segue,就像你已經顯示的那樣,在執行segue之前,你將根VC設置爲委託,那麼根VC中的那個方法將從那裏調用,你可以實現你想要的。 –
我只是不能直接從另一個函數返回模態vc的結果。它的結果(布爾值)存儲在一個變量中,所以這意味着在**更新之前我總是使用舊值**。有沒有辦法可以替代「???」在我的代碼中,模態VC的**立即**結果? –