我有一个视图控制器(比如a)。我正在将一些视图控制器推到第一个视图控制器(A)上。完成一些任务后,我将切换回我的第一个视图控制器(A)。也就是说,我弹出到rootviewcontroller(A)。但是这次我的视图控制器(A)应该有一个alertview。
我的问题是:在这种情况下,设置全局布尔变量是正确的方法吗。我的意思是,我声明了一个全局布尔变量,只有当视图控制器弹出时,它才会设置为true。有没有更好的方法我可以做到这一点。
当然,当ViewController出现时,您可以使用全局NSString(或BOOL)来显示AlertView
在下面的代码中,我使用了String变量
在AppDelegate.h类中声明NSString变量
NSString * checkAlert;
//make property of that NSString.
@property(retain,nonatomic)NSString * checkAlert;
在AppDelegate.m 中
//synthesize checkAlert
@synthesize checkAlert;
checkAlert=@"NotNeed";
然后在ViewController 中
-(void)ViewWillAppear{
// here check if checkAlert contains string as you want
if(checkAlert isEqualToString:@"showAlert"){
//here show the AlertView
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert" message:@"AlerViewmessage" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
}
//when you abou to navigate to another ViewController the Access that checkAlert String as
-(void)goToAnotheViewController{
AppDelegate* appdele=(AppDelegate*)[[UIApplication sharedApplication]delegate];
appdele.checkString=@"showAlert";
//then navigate to viewController
[self.navigationController pushViewController: animated:YES];
}
//you just need to compare checkString's value string .
它将工作
您也可以将其保存在NSUserDefaults
中。在ViewController中:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setBool:YES forKey:@"some_key"];
在viewWillAppear
中的另一个ViewController中,例如:
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
BOOL val = [prefs boolForKey:@"some_key"];
您还可以将您的第一个视图控制器设置为全局变量,例如在AppDelegate中,然后您可以通过访问它
(YourAppDelegate*)[UIApplication sharedApplication].firstViewController
然后在弹出后调用它上的DisplayAlert函数。
或者,您可以将第一个视图控制器作为"主视图控制器"传递给所有随后推送的视图控制器,然后调用该函数,而不需要全局变量。
或者您可以通过调用访问根视图控制器
[self.navigationController.viewControllers objectAtIndex:0]
然后调用上面的警报函数。