0

サードパーティの開発者向けのフレームワークを構築しています。私が構築している方法は、静的 iOS プロジェクトを作成し、ここにリストされている手順に従っていることです。今、そのフレームワークの例に次のものを追加しました:

フレームワーク プロジェクトに ViewController を追加しました

プロジェクトのメインのパブリック クラスには、サード パーティの開発者が実装するデリゲートがあります。

ここで実装する必要があるのは、たとえば、サードパーティの開発者が私のフレームワークを使用し、デリゲートをアプリのクラスに設定するとします。私のフレームワークで実行したいことは、目的のコンテンツを表示するビューの上にビュー コントローラーを表示することです。presentModalViewControllerフレームワーク プロジェクトのメイン クラスは NSObject クラスであり、などのメソッドをサポートしていないことが判明しました。

したがって、上記の目的を達成する方法を提案できますか。つまり、私のフレームワークは、デリゲートのビューの上にビュー コントローラーを提示する必要があります。また、フレームワーク プロジェクトでインターフェイス ビルダーを使用してビュー コントローラーを作成しています。それが正しいアプローチであるかどうかを提案してください。そうでない場合、ビューを呼び出す上に必要なビューのレイアウトを純粋にコードで設計するにはどうすればよいでしょうか。

4

1 に答える 1

1

標準 SDKのMFMailComposeViewControllerおよびその他のいくつかのパターンに従う必要があると思います。つまり、フレームワークはUIViewController のサブクラスであるpublicクラスを提供します。

#import <MyFramework/MyFrameworkViewController.h>

@interface CustomerViewController : UIViewController <MyFrameworkViewControllerDelegate>
@end

- (IBAction)pressedShowFrameworkVC:(id)sender {

    MyFrameworkViewController *frameworkVC = [[MyFrameworkViewController alloc] init];
    // your framework init can init from your bundle's nib
    frameworkVC.delegate = self;
    [self presentViewController:frameworkVC animated:YES completion:^{}];
}

フレームワーク vc は、ユーザーが終了すると、それ自体を閉じます。

// MyFrameworkViewController.m

[self dismissViewControllerAnimated:YES completion^{
    [self.delegate frameworkVC:self didFinishWithStuff:@"Done"];
}];

あなたの顧客はこれを実装しています...

- (void)frameworkVC:(MyFrameworkViewController *)frameworkVC didFinishWithStuff:(NSString *)objectDescribingCompletionState {

}

編集- あなたのフレームワークが顧客アプリのためにビューコントローラー以外の作業を行う必要があるとします。NSObject (または NSURLConnection など) のサブクラスを別のパブリック クラスとして提供することもできます。

// CustomerViewController.m
#import <MyFramework/MyFrameworkWorkerBee.h>

- (IBAction)pressedMakeMyFrameworkDoSomethingUseful:(id)sender {

    MyFrameworkWorkerBee *workerBee = [[MyFrameworkWorkerBee alloc] init];
    [workerBee fetchStuffFromTheWebWithCompletion:^(id result) {
        // now present results
        MyFrameworkViewController *frameworkVC = [[MyFrameworkViewController alloc] init];
        frameworkVC.delegate = self;
        frameworkVC.resultsToPresent = results;
        [self presentViewController:frameworkVC animated:YES completion:^{}];
    }];
}
于 2013-03-28T16:07:18.780 に答える