ios - 框架、委托(delegate)和 View Controller

标签 ios objective-c

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

向框架项目添加了 ViewController

该项目的主要公共(public)类有一个第三方开发人员将实现的委托(delegate)

现在我需要实现的是,例如,第三方开发人员使用我的框架并将委托(delegate)设置为他们的应用程序的类。我希望我的框架做的是在他们的 View 顶部呈现一个 View Controller ,显示所需的内容内容。 原来框架项目中的主类是一个NSObject类,不支持presentModalViewController等方法

那么您能否建议一种实现上述目的的方法,即我的框架应该在委托(delegate) View 之上呈现一个 View Controller 。另外,我正在框架项目中使用界面生成器创建 View Controller 。请建议这是否是正确的方法。如果没有,您认为我如何设计在调用 View 之上所需的 View 布局 - 纯粹通过代码?

最佳答案

我认为你应该遵循 MFMailComposeViewController 的模式以及标准 SDK 中的其他几个。这意味着您的框架将提供公共(public)类,它是 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 {

}

编辑 - 假设您的框架还需要为客户应用程序执行一些与 View Controller 无关的工作。它仍然可以提供 NSObject(或 NSURLConnection 或其他)的子类作为另一个公共(public)类。

// 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:^{}];
    }];
}

关于ios - 框架、委托(delegate)和 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15686487/

相关文章:

iphone - 什么时候dispatch_release()?

ios - 如果体系结构设置为 arm,我的应用程序如何在 iOS 模拟器中运行?

ios - 如何使用 NSURLConnection 查看为 HTTP 请求设置了哪些 header 字段(cookie)?

ios - 使用自定义字体在 iOS 应用程序中截断中文字体

objective-c - 我如何使用 PodioKit 和 PKTSearchAPI 在 Podio App 中进行搜索?

iphone - 我们如何隐藏 tableHeaderView 和 tableFooterView?

iphone - 如何在 iOS 设备上创建新的 EKCalendar?

ios - objc podspec 项目中的快速依赖

ios - 使用 UIImage 和其他属性创建自定义图像

iphone - 在 iPhone 中显示超链接