基本的に、リモート ファイルへのリンクのタップをインターセプトし、代わりに既に保存したローカル バージョンを開こうとしています。
リンクがタップされた後、リンクのアクションに到達することはできますが、URL をそのまま維持しながらデフォルトの動作を実行するのを停止する方法がわかりません。
関連するコードは次のとおりです。
- (void)pdfScrollViewTap:(UITapGestureRecognizer *)gestureRecognizer
{
Annot *annotation;
@try {
// If they are clicking an annotation, we don't want to process this
[self.pdfView DocLockRead];
CGPoint down = [gestureRecognizer locationInView:self.pdfView];
annotation = [self.pdfView GetAnnotationAt:down.x y:down.y];
}
@catch (NSException *exception) {
// something is wrong with the annotation, it may not be selected properly
}
@finally {
[self.pdfView DocUnlockRead];
}
// This is how we find out a Link was tapped
if ([annotation IsValid]) {
if (annotation.GetType == e_Link) { // Its a link
Link *link = [[Link alloc] initWithAnn:annotation]; // here's the link
Action *action = link.GetAction; // links have an action, heres that
if ([action IsValid]) { // hopefully its valid
if (action.GetType == e_URI) { // URI is the URL the link points to
if ([self.delegate respondsToSelector:@selector(shouldOpenURLforLinkAnnotation:withViewController:)]) { // Check if the delegate implements this
NSString *origURL = [action.GetSDFObj FindObj:@"URI"].GetAsPDFText;
if (![self.delegate shouldOpenURLforLinkAnnotation:origURL withViewController:self]) {
// The delegate handles finding and opening the local file
// Find a away to disable or stop the action here
}
}
}
}
}
return;
}
}
私は単にアクションを削除しようとしました:
[link RemoveAction];
これは初めて機能しますが、予想どおり、アクションを削除した後、アクションが再度呼び出されることはありません。