使用iOS中模态视图控制器的返回值

时间:2016-05-11 08:26:14

标签: ios swift cocoa-touch

我有一个类似于UIView的子类:

item selector

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()函数中使用返回的值?

3 个答案:

答案 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);
}