私が開発しているアプリでは、ユーザーがドキュメントをアプリにインポートするたびに最初に表示されるビューがあります。私が望むのは、ダイアログ ボックス ( UIAlert またはアクティビティ シート メニューの可能性があります) を表示して、そのファイルを本当にインポートするかどうか (はいまたはキャンセル) をユーザーに尋ねることです。インポート アクションが実行される前にUIAlert/Actionsheet メニューを表示する方法と、ユーザーが [はい] または [いいえ] または [ファイルの変更] をクリックしたときに実行されるアクションを割り当てる方法を知りたいです。
表示されるビューは、ProgressBarView.m/h と呼ばれます。その中には、次のようなviewdidloadがあります。
- (void)viewDidLoad
{
[super viewDidLoad];
self.progressBar.progressTintColor = [UIColor colorWithRed:153.0/255 green:0 blue:0 alpha:1.0];
self.progressBar.progress = 0.0;
/*progressValueLabel = [NSString stringWithFormat:@"%.0f%%", (self.progressBar.progress * 100)];*/
self.progressTimer = [NSTimer scheduledTimerWithTimeInterval:0.3f
target:self
selector:@selector(changeProgressValue)
userInfo:nil
repeats:YES];
}
appdidFinishLaunchwith オプションでインポートが開始されると、アプリ デリゲートで呼び出されます。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSURL *url = (NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
if (url != nil && [url isFileURL]) {
**[self handleImportURL:url];** // this is the function that handles the import
}
インポートを行い、progressView を呼び出す関数は次のとおりです。
- (void)handleImportURL:(NSURL *)url
{
// Show progress window
UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
__block PVProgressViewController * progressController = [storyboard instantiateViewControllerWithIdentifier:@"kProgressViewController"];
self.window.rootViewController = progressController;
// Perform import operation
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSError *outError;
NSString * csvString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&outError];
NSArray * array = [csvString csvRows];
[[PVDatabaseController sharedController] importArray:array progressHandler:^(float progress) {
progressController.progressBar.progress = progress;
}];
dispatch_async(dispatch_get_main_queue(), ^{
self.window.rootViewController = controller;
});
});
}