我决定使用UITableViewController和delegate创建一个简单的FileBrowser来检测你选择的文件,
我就像这样展示了UITableViewController
fbVC = [[FileBrowserTableViewController alloc] init];
fbVC.delegate = self;
fbVC.path = @"/";
navigationController = [[UINavigationController alloc] initWithRootViewController:fbVC];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;并在另一个类中添加了委托方法
- (void)fileBrowser:(FileBrowserTableViewController *)fileBrowser didFinishWithFileURL:(NSURL *)fileURLPath {
NSString *extString = [fileURLPath absoluteString];
NSString *ext = [[extString pathExtension] lowercaseString];
NSString* theFileName = [[extString lastPathComponent] stringByDeletingPathExtension];
CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)fileURLPath.pathExtension, NULL);
CFStringRef MIMEType = UTTypeCopyPreferredTagWithClass(UTI, kUTTagClassMIMEType);
NSString *MIMETypeString = (__bridge NSString*)MIMEType;
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"FileBrowser" message:[NSString stringWithFormat:@"---URL : %@ --FileName : %@ --ext %@: mimetype : %@", fileURLPath, theFileName, fileURLPath.pathExtension, MIMETypeString] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
[self.companion sendDocumentsAtPath:fileURLPath fileName:[NSString stringWithFormat:@"[TGEnhancer]%@.%@",theFileName, fileURLPath.pathExtension] mimeType:MIMETypeString];
// [fileBrowser.navigationController popViewControllerAnimated:YES];
[fileBrowser.navigationController dismissViewControllerAnimated:YES completion:^{
NSLog(@"File Browser - Finished");
}];
}但是由于某些原因,这个委托只能从UINavigationController的第一个页面开始工作,这里是我的.h文件
@protocol FileBrowserTableViewControllerDelegate;
@interface FileBrowserTableViewController : UITableViewController
{
NSString *path;
NSMutableArray *files;
}
@property (nonatomic,retain) NSString *path;
@property (nonatomic,retain) NSMutableArray *files;
@property (nonatomic, strong) id<FileBrowserTableViewControllerDelegate> delegate;
@end
@protocol FileBrowserTableViewControllerDelegate <NSObject>
@optional
- (void)fileBrowser:(FileBrowserTableViewController *)fileBrowser didFinishWithFileURL:(NSURL *)fileURLPath;
- (void)fileBrowserDidCancel:(FileBrowserTableViewController *)fileBrowser;
@end这里是我的didSelectRowAtIndexPath方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
File *aFile = [files objectAtIndex:indexPath.row];
if(aFile.isDirectory)
{
FileBrowserTableViewController *anotherViewController = [[FileBrowserTableViewController alloc] init];
anotherViewController.path = [path stringByAppendingPathComponent:aFile.name];
[self.navigationController pushViewController:anotherViewController animated:YES];
} else {
[self doOpenFileAtIndexPath:indexPath];
}
}
- (void)doOpenFileAtIndexPath:(NSIndexPath*)indexPath {
// File *aFile = [files objectAtIndex:indexPath.row];
[self openFileAtIndexPath:indexPath];
}
- (void)openFileAtIndexPath:(NSIndexPath*)indexPath
{
File *aFile = [files objectAtIndex:indexPath.row];
NSString *extension = [[aFile.name pathExtension] lowercaseString];
NSString *fullpath = [path stringByAppendingPathComponent:aFile.name];
NSURL *filePathUrl = [NSURL fileURLWithPath:fullpath];
UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"Type Existe"
message:[NSString stringWithFormat:@"--Name : %@ Fullpath : %@", aFile.name, fullpath]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
[self.delegate fileBrowser:self didFinishWithFileURL:filePathUrl];
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
}有谁可以帮助我,告诉我在UINavigationController中到底是什么让委托工作(一次)?特别是从第一个路径(如果我打开另一个路径并选择一个文件,它将不起作用。
谢谢
发布于 2014-11-28 20:19:06
OPs我想我自己找到了解决方案,我的错误是在didSelectRowAtIndexPath方法中,我没有再次调用委托。
这里的代码为我工作
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
File *aFile = [files objectAtIndex:indexPath.row];
if(aFile.isDirectory)
{
FileBrowserTableViewController *anotherViewController = [[FileBrowserTableViewController alloc] init];
anotherViewController.path = [path stringByAppendingPathComponent:aFile.name];
anotherViewController.delegate = self.delegate;
[self.navigationController pushViewController:anotherViewController animated:YES];
} else {
[self doOpenFileAtIndexPath:indexPath];
}
}再次感谢..希望它能帮助其他人..
https://stackoverflow.com/questions/27188235
复制相似问题