0

我正在为第三方开发人员构建一个框架。我正在构建的方式是我创建了一个静态 iOS 项目并按照此处列出的步骤进行操作。现在我在该框架示例中添加了以下内容:

在框架项目中添加了一个 ViewController

项目的主要公共类有一个委托,第三方开发者将实现

现在我需要实现的是,例如,第三方开发人员使用我的框架并将委托设置为他们的应用程序的类。我希望我的框架做的是在他们的视图之上显示一个视图控制器,以显示所需的内容。原来框架项目中的主类是一个NSObject类,不支持诸如此类的方法presentModalViewController

那么您能否提出一种实现上述目的的方法,即我的框架应该在委托视图上方呈现一个视图控制器。另外,我正在使用框架项目中的界面构建器创建我的视图控制器。请建议这是否是正确的方法。如果不是,你认为我如何设计我需要在调用视图之上的视图布局 - 纯粹通过代码?

4

1 回答 1

1

我认为您应该遵循标准 SDK 中的MFMailComposeViewController和其他几个模式。这意味着您的框架将提供作为 UIViewController 子类的公共

#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 回答