![](/img/trans.png)
[英]swift - how can i check if a specific viewController is the previous 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.