リンクボタンがタップされたときにSFSafariViewControllerを表示する単純なビューコントローラがあります。SFSafariViewControllerDelegateメソッドは、ビューコントローラ以外にデリゲートを割り当てるときに呼び出されません
#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はSFSafariViewControllerDelegateに準拠したときにデリゲートメソッドの火だけ記録します。
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
私はボタンをタップすると、safariviewcontrollerが適切にページをロードするが、デリゲートメソッドは、(ときなど、呼び出されることはありません私は '完了'を押す)。私は 'vc'が表示されている行にブレークポイントを張り、その時点でデリゲートが適切に設定されていることを確認しました。私は何が欠けていますか?