2013-03-28 54 views
0

我正在为第三方开发人员构建一个框架。我建设的方式是我创建了一个静态iOS项目,并遵循列出的步骤here。现在,我增加了以下东西该框架例如:框架,代表和视图控制器

增加了一个视图控制器到框架项目

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

现在我需要实现的就是例如,第三方开发人员使用我的框架并将委托设置为其应用程序的类。我希望框架执行的操作是在其视图顶部呈现一个视图控制器,以显示所需的内容。 事实证明,框架项目中的主类是NSObject类,不支持类似presentModalViewController等方法。

所以,你可以提出一种实现上述目的的方法,即我的框架应该呈现在代理视图上方查看控制器。另外,我正在框架项目中使用接口生成器创建视图控制器。请建议,如果这是正确的方法或不。如果不是的话,你如何看待我在调用视图之上设计视图的布局 - 纯粹是通过代码?

回答

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

嗨,谢谢你的回复。但是,请考虑应用程序调用我的框架的场景。我想要的是该应用程序将自己设置为我的框架的委托,并告诉框架开始工作。然后,框架将与Web服务器通信以获取必须显示的数据。当数据到达时,框架应该在调用委托的视图上显示一个视图控制器,这是用户与之交互的时候。 上面的例子立即展示了我的框架视图,这不是必需的。:( –

+0

是的,我预期这种答案在回答时会改为:“但是我的框架需要做一些与视图控制器无关的东西”答案是 - 你的框架可以包含许多类(甚至是相关的)客户使用将现在编辑我的答案详细 – danh

+0

好吧,我应用上面提到的任何东西,并尝试实现一个基本的和简单的应用程序,但事实证明,我得到的_framework找不到error_但是当我导入框架到这个简单的程序,它正确导入(自动完成工作以及).​​.但是当我运行代码,它失败说没有找到框架。 –