如何检查以前的viewcontroller是打开的

时间:2016-02-01 09:23:40

标签: ios objective-c uiviewcontroller

我有ViewController A B和C.表单B和C我可以导航回ViewController A.

首先显示的是ViewController A,之后用户可以转到B或C

我想在ViewController A上的文本框中显示一条消息,前提是用户是否从ViewContoller C返回

那么如何识别/检查用户是否来自特定的ViewController C?

4 个答案:

答案 0 :(得分:2)

  • 您可以在推出之前在A viewController中选择一个属性 B Or C ViewController navigationController可以设置此viewController 你正在推动ViewController C or B的nane属性。
  • 当您弹出viewWillAppear时,A的textField会在您所在的位置被调用 如果它是您在推送时先前设置的C,则可以将ViewController *cViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"cViewControllerID"]; self.viewControllerPushed = @"cVC"; [self.navigationController pushViewController:cViewController animated:YES]; 设置为控制器名称。

//推送C

ViewController *bViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"bViewControllerID"];
self.viewControllerPushed = @"bVC";
[self.navigationController pushViewController:bViewController animated:YES];

//推送B

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    if([self.viewControllerPushed isEqualToString:@"cVC"]){
        //show in textField
    }
}

//在viewWillAppear

= form_for @order, :url => update_checkout_path(:payment), :html => { :id => "checkout_form_payment" } do |form|    
    %li#paypal.list-group-item
    %label
      %input#order_payments_attributes__payment_method_id_5{:checked => "checked", :name => "order[payments_attributes][][payment_method_id]", :type => "radio", :value => "5"}
        Test Paypal
        .logo
          %img{:src => "/assets/icons/icon-paypal.png"}
    %li.list-group-item.codMobile#cashondelivery1
        %label
          %input#order_payments_attributes__payment_method_id_216{:name => "order[payments_attributes][][payment_method_id]", :type => "radio", :value => "216", :checked => 'checked'}
          Cash On Delivery   

    = submit_tag Spree.t(:order_now), :class => 'order-now btn btn-danger'   

答案 1 :(得分:2)

解决方案1:

您可以使用委托来执行此操作。

您可以定义一个协议,比如RootViewControllerDelegate。

RooViewController将拥有符合此协议的委托。

您的TopViewController将符合此协议,该协议可能有一个方法,如-RootViewControllerCompletedSomeThing,RootViewController在完成后可以发送。

在TopViewController的这个方法的实现中,它可以解除/弹出RootViewController,并在RootViewController被解除时做你想要做的其他任何事情。

解决方案2:

您可以将NSUserDefaults设置为每个视图控制器。

例如For ViewController A

[[NSUserDefaults standardUserDefaults] setObject:@"Yes" forKey:@"ViewControllerA"];

例如For ViewController B

[[NSUserDefaults standardUserDefaults] setObject:@"Yes" forKey:@"ViewControllerB"];

例如For ViewController C

[[NSUserDefaults standardUserDefaults] setObject:@"Yes" forKey:@"ViewControllerC"];

在ViewController ViewDidLoad中查看下面的条件

-(Void)ViewDidLoad
{
 if([[NSUserDefaults standardUserDefaults]ValueForKey:@"ViewControllerC"] isEqualToString:@"Yes"])

{
//Write your code.
}

}

答案 2 :(得分:0)

您可以简单地使用委托或通知模式...... 对于前通知模式

 NSNotificationCenter.defaultCenter().addObserver(self, selector: "changeTextFieldData", name:kNotificationFromBackFromVcC , object: nil)



 func changeTextFieldData(){
     //set data as you want in your textfield...
    }

在你的方法......

并在ViewController C中的btnClick事件中 你可以打电话......

`NSNotificationCenter.defaultCenter().postNotificationName(name:kNotificationFromBackFromVcC, object: nil`)

对于前。 委托模式

你在ViewController C中的

protocol BackClickDelegate
{
    func backlickFromVC(isChange:Bool);
}

在ViewController C中的btnClick事件写

if self.delegate?.respondsToSelector(Selector("backClick")) {
    ... do your works            

}
在viewcontroller中

您可以实现该委托方法。

  func backClick(){
}

答案 3 :(得分:0)

@interface viewController(){
NSString strViewController;
}

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    if(strViewController){
         if([strViewController isEqualToString:@"B"]){
               self.textFieldMsg.text=@"B";
         }
         else{
                self.textFieldMsg.text=@"C";
         }
    }
}


//Befor Puch to B or C from ViewController A just assigne value for variable strViewController

like 
strViewController=@"B" for pushViewController:viewControllerB

strViewController=@"C" for pushViewController:viewControllerC