2013-03-28 51 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_但是當我導入框架到這個簡單的程序,它正確導入(自動完成工作以及).​​.但是當我運行代碼,它失敗說沒有找到框架。 –