我有ViewController A B和C.表单B和C我可以导航回ViewController A.
首先显示的是ViewController A,之后用户可以转到B或C
我想在ViewController A上的文本框中显示一条消息,前提是用户是否从ViewContoller C返回
那么如何识别/检查用户是否来自特定的ViewController C?
答案 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