Вот моя попытка включить решение этого в контроллер представления. Необходимо использовать два параметра bool, потому что пользователь может открывать внешнюю программу независимо от safari при загрузке представления, но кнопка, для которой требуется safari, еще не открыта.
@implementation ViewController {
@private BOOL externalProgramOpened;
@private BOOL buttonPressed;
}
-(void) setExternalProgramOpened {
// Only set to yes if we're trying to open safari
if(buttonPressed) {
externalProgramOpened = YES;
}
}
-(void) notifyUserOfRestrictedAccess {
if(externalProgramOpened == NO) {
[[[UIAlertView alloc] initWithTitle:@"Safari Needs to be enabled!"
message:@"It looks like the Safari browser is
disabled. Please enable it
(Settings>General>Restrictions) in order to
continue."
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles: nil] show];
} else {
externalProgramOpened = NO;
}
buttonPressed = NO;
}
-(void) viewWillAppear:(BOOL)animated {
externalProgramOpened = NO;
buttonPressed = NO;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(setExternalProgramOpened)
name:UIApplicationWillResignActiveNotification
object:nil];
}
-(void) viewWillDisappear:(BOOL)animated {
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIApplicationWillResignActiveNotification
object:nil];
[super viewWillDisappear:animated];
}
- (IBAction)buttonPressed:(id)sender {
buttonPressed = YES;
NSString * URL = *someURL*;
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:URL]];
[self performSelector:@selector(notifyUserOfRestrictedAccess) withObject:self
afterDelay:.75];
}