Ich habe einen einfachen View-Controller, der einen SFSafariViewController anzeigt, wenn auf eine Link-Schaltfläche geklickt wird.SFSafariViewControllerDelegate-Methoden werden nicht aufgerufen, wenn Delegate einem anderen als dem View-Controller zugewiesen werden
#import "ViewController.h"
#import "SafariDelegate.h"
@interface ViewController()
@property(nonatomic, strong) NSString *url;
@property(nonatomic, weak) SafariDelegate *safariDelegate;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.url = @"http://www.google.com";
}
- (IBAction)linkTapped:(id)sender {
SFSafariViewController *vc = [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:self.url]];
SafariDelegate *safariDelegate = [[SafariDelegate alloc] init];
vc.delegate = safariDelegate;
[self presentViewController:vc animated:YES completion:nil];
}
@end
SafariDelegate entspricht SFSafariViewControllerDelegate und protokolliert nur, wenn die Delegatmethoden Feuer.
SafariDelegate.h
#import <Foundation/Foundation.h>
#import <SafariServices/SafariServices.h>
@interface SafariDelegate : NSObject <SFSafariViewControllerDelegate>
@end
SafariDelegate.m
#import "SafariDelegate.h"
@implementation SafariDelegate
- (NSArray<UIActivity *> *)safariViewController:(SFSafariViewController *)controller activityItemsForURL:(NSURL *)URL title:(nullable NSString *)title
{
NSLog(@"safariViewController activityItemsForURL");
return @[];
}
- (void)safariViewControllerDidFinish:(SFSafariViewController *)controller
{
NSLog(@"safariViewControllerDidFinish");
}
- (void)safariViewController:(SFSafariViewController *)controller didCompleteInitialLoad:(BOOL)didLoadSuccessfully
{
NSLog(@"safariViewController didCompleteInitialLoad");
}
@end
Wenn ich die Taste tippen, lädt die safariviewcontroller die Seite richtig, aber die Delegierten Methoden aufgerufen nie (auch wenn Ich drücke 'Fertig'). Ich habe einen Haltepunkt an der Linie angebracht, wo der 'vc' präsentiert wird, und bestätigt, dass der Delegierte zu diesem Zeitpunkt richtig eingestellt ist. Was vermisse ich?