我有一个类似于UIView的子类:
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,视图将保持不变。我已经用segues连接了控制器。
如何根据我在模态视图控制器中按下的按钮返回布尔值?我如何在addItemOrNot()函数中使用返回的值?
答案 0 :(得分:0)
您可以达到利用代表的目的。
在
func addItemOrNot() -> Bool {
performSegueWithIdentifier("AddOrNot", sender: self)
return ??? // results from modal view controller
}
下面,
将当前视图控制器设置为模态视图控制器的委托
modalViewController.delegate = self
当模态视图控制器被取消或在这种情况下被解雇时,使用您希望传递的布尔值调用委托方法
[self.delegate onCancel:YES/NO];
在解除模态视图控制器时写入。
然后,一旦收到此值,您就可以将其传递给您想要的功能。
答案 1 :(得分:0)
将两个viewcontroller视为A和B.
现在在B中采用公共变量或A的实例。
当呈现B从A viewcontroller中将A的实例设置为self时。
所以你的B Vc获得A的实例或参考。
现在您可以调用A的任何公共函数或方法 B使用A的实例。
因此,在使用B中声明的A实例解除B vc时进行更改。
希望这会有所帮助:)
答案 2 :(得分:0)
我喜欢做的是在主视图控制器中,我有一个方法'myUnwindAction',它在关闭详细视图控制器时被调用。详细视图控制器在returnMethod值中存储“是”或“否”。 解除细节视图控制器时调用unwindSegue。在故事板中,您需要选择 - 将详细视图控制器中的“退出”segue按钮拖动到主视图控制器。
- (IBAction)myUnwindAction:(UIStoryboardSegue*)unwindSegue {
DetailViewController *dvc = (DetailViewController *)[unwindSegue sourceViewController];
int returnMethod = [dvc returnMethod];
NSLog(@"Return Action: %d",returnMethod);
}