簡體   English   中英

如何檢查以前的ViewController是否打開

[英]how to check what previous viewcontroller was open

我有ViewController AB和C。表格B和CI可以導航回ViewControllerA。

首先顯示的是ViewController A,該用戶可以轉到B或C

僅當用戶從ViewContoller C返回時,我才想在ViewController A上的文本框中顯示一條消息

那么,如何確定/檢查用戶是否來自特定的ViewController C?

  • 您可以在A viewController采用一個屬性,就在將B Or C ViewController推入navigationController之前,可以使用要推入的viewController設置此屬性。
  • 當您彈出ViewController C or B ,將調用A的viewWillAppear ,您可以在其中設置textField字段,如果它是C,則可以使用控制器的名稱設置控制器的名稱,而您在推送時已設置了它。

//同時按下C

ViewController *cViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"cViewControllerID"];
self.viewControllerPushed = @"cVC";
[self.navigationController pushViewController:cViewController animated:YES];

//按下B時

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

//在viewWillAppear中

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

解決方案1:

您可以使用委派來執行此操作。

您可以定義一個協議,例如RootViewControllerDelegate。

RooViewController將具有一個符合此協議的委托。

您的TopViewController將符合此協議,該協議可以具有-RootViewControllerCompletedSomeThing之類的方法,RootViewController完成后可以發送該方法。

在TopViewController的此方法的實現中,它可以關閉/彈出RootViewController,並在關閉RootViewController后執行您想做的其他事情。

解決方案2:

您可以將NSUserDefaults設置為每個視圖控制器。

例如對於ViewController A

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

例如對於ViewController B

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

例如對於ViewController C

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

並在下面的Viewcontroller ViewDidLoad中檢查條件

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

{
//Write your code.
}

}

您可以簡單地使用委托或通知模式...對於前通知模式

 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 A中,您可以實現該委托方法。

  func backClick(){
}
@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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM