Я наблюдаю другое поведение, когда «presentOpenInMenuFromRect» выполняется в iPhone4 и iPad2 (оба работают в iOS 4.3.5). В iPad2 показан раскрывающийся список со всеми приложениями, которые могут открывать определенный файл, и он работает нормально; тем не менее, в iPhone4 также отображается раскрывающийся список (и он также работает нормально), но в конце раскрывающегося списка есть кнопка «Отмена», которая кажется неактивной.
В iPad2 эта проблема не возникает, потому что кнопка «Отмена» не появляется, появляется только раскрывающийся список, а когда я касаюсь другой области, отличной от раскрывающегося списка, этот список закрывается; что является желаемым поведением.
То, что я имею в виду, говоря, что кнопка «Отмена» в iPhone / iPhone4, кажется, неактивна, это: когда я касаюсь ее, тогда ничего не происходит! Что ж, если быть более точным, если я коснусь его несколько раз за короткий промежуток времени или времени, то кнопка «Отмена», скорее, чем раньше, откликнется (она меняет цвет с серого на синий), а затем выпадающий список. действительно закрыт; что является желаемым поведением.
Я использую «presentOpenInMenuFromRect» следующим образом: я реализовал кнопку «Сохранить», которая по умолчанию скрыта; однако в методе «- (void) webViewDidFinishLoad: (UIWebView *) webView» я обнаруживаю «расширение пути» URL-адреса, и если оно имеет расширение «.pdf», то я показываю кнопку «Сохранить»; то есть:
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
if ([[[myWebViewOL.request.URL.absoluteString pathExtension] lowercaseString] isEqualToString:@"pdf"])
{
saveFile0L.hidden = NO;
}
}
А «действие», связанное с кнопкой «сохранить» (saveFile0L), представляет собой следующий метод «saveFile»:
[saveFile0L addTarget:self action:@selector(saveFile) forControlEvents:UIControlEventTouchUpInside];
где "saveFile" имеет следующий код:
- (void) saveFile
{
//Do not worry about "FileManager" is only a singleton class
//which I have defined in order to implement some common methods
//and one of them is "saveFile:(UIWebView*) withUIView:(UIView*)
[[FileManager sharedInstance] saveFile:myWebView withUIView:self.view];
}
И "saveFile: (UIWebView *) myWebView withUIView: (UIView *) self.view" имеет следующий код:
- (void) saveFile:(UIWebView*)webView withUIView:(UIView*)view
{
NSString* fileName = [[NSFileManager defaultManager] displayNameAtPath:webView.request.URL.absoluteString];
NSURL* fileurl = [NSURL URLWithString:webView.request.URL.absoluteString];
NSData* data = [NSData dataWithContentsOfURL:fileurl];
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* docsDirectory = [paths objectAtIndex:0];
NSString* filePath = [docsDirectory stringByAppendingPathComponent:fileName];
[data writeToFile:filePath atomically:YES];
NSURL* url = [NSURL fileURLWithPath:filePath];
//UIDocInteractionController API gets the list of devices that support the file type
docController = [UIDocumentInteractionController interactionControllerWithURL:url];
[docController retain];
//Note:[docController presentOpenInMenuFromRect:CGRectZero inView:view animated:YES]
//presents a drop down list of the apps that support the file type,
//clicking on an item in the list will open that app while passing in the file.
//Note: [[UIApplication sharedApplication] canOpenURL:fileurl]
//will return YES if there is an app that can handle the specific file
BOOL isValid = ([[UIApplication sharedApplication] canOpenURL:fileurl] &&
[docController presentOpenInMenuFromRect:CGRectZero inView:view animated:YES]);
if (!isValid)
{
[self showAlertSaveFileError:fileName];
}
}
В настоящее время я не знаю, как правильно заставить работать кнопку «Отмена», которая появляется только в iPhone (не в iPad) в конце выпадающего списка.
Заранее спасибо,