我認爲你應該遵循標準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:^{}];
}];
}
嗨,謝謝你的回覆。但是,請考慮應用程序調用我的框架的場景。我想要的是該應用程序將自己設置爲我的框架的委託,並告訴框架開始工作。然後,框架將與Web服務器通信以獲取必須顯示的數據。當數據到達時,框架應該在調用委託的視圖上顯示一個視圖控制器,這是用戶與之交互的時候。 上面的例子立即展示了我的框架視圖,這不是必需的。:( –
是的,我預期這種答案在回答時會改爲:「但是我的框架需要做一些與視圖控制器無關的東西」答案是 - 你的框架可以包含許多類(甚至是相關的)客戶使用將現在編輯我的答案詳細 – danh
好吧,我應用上面提到的任何東西,並嘗試實現一個基本的和簡單的應用程序,但事實證明,我得到的_framework找不到error_但是當我導入框架到這個簡單的程序,它正確導入(自動完成工作以及)..但是當我運行代碼,它失敗說沒有找到框架。 –