2013-03-30 98 views
3

我在想如何爲Twitter或Facebook或任何其他類創建一個類。所以只需將該類導入到我的項目中,並開始使用一個代碼。例如。如果我使用twitter框架,那麼我必須編寫它的功能。我只是想通過導入它來創建一個功能類,它將在我所有未來的項目中起作用。 例如:如何使方法與uiviewcontroller一起工作

任何類或任何東西:

-(void)shareOnTwitter:(NSString *)text withUrl:(NSURL *)url withImage:(UIImage *)image 
{ 
    // ALL TWITTER Code HERE; 
} 

,在任何項目中我主要的viewController:

- (IBAction)socialBtn:(id)sender 
{ 
    [self shareOnTwitter:@"This is Text" withUrl:nil withImage:nil]; 
} 

更新:只是試圖分類的方式,但沒有響應返回,任何想法,我錯了嗎?:

UIViewController + CustomMethods.h

#import <UIKit/UIKit.h> 
#import <Social/Social.h> 

@interface UIViewController (CustomMethods) 

-(void)shareOnTwitter:(NSString *)text withUrl:(NSURL *)url withImage:(UIImage *)image; 

@end 

的UIViewController + CustomMethods.m

#import "UIViewController+CustomMethods.h" 

@implementation UIViewController (CustomMethods) 

-(void)shareOnTwitter:(NSString *)text withUrl:(NSURL *)url withImage:(UIImage *)image { 

    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) 
    { 

     SLComposeViewController *tweetSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; 

     [tweetSheet setInitialText:text]; 
     [tweetSheet addImage:image]; 
     [tweetSheet addURL:url]; 

     [self presentViewController:tweetSheet animated:YES completion:nil]; 
    } 
    else 
    { 
     UIAlertView *alertView = [[UIAlertView alloc] 
            initWithTitle:@"Sorry" 
            message:@"You can't Post a Status right now, make sure your device has an internet connection and you have at least one Twitter account setup" 
            delegate:nil 
            cancelButtonTitle:@"OK" 
            otherButtonTitles:nil]; 
     [alertView show]; 
    } 

} 
@end 

mainViewController:

NSString *title = [webViewOutlet stringByEvaluatingJavaScriptFromString:@"document.title"]; 
      NSURL *url = [[webViewOutlet request] URL]; 

      [self shareOnTwitter:title withUrl:url withImage:nil]; 
+0

Thanks一個..特別爲克里斯Loonam,學會了如何使委託方法.... – user777304

回答

4

我相信這是一個您可以使用Objective-C功能(稱爲「類別」)的實例。一個類別是對已經建立的類的擴展。例如,我們可以爲UIViewController創建一個類別,它將向所有UIViewController類添加新方法。

要做到這一點,我們執行以下操作:

使.h文件中聲明原型:

@interface UIViewController (CategoryName) // EG. (Twitter) 
// PROTOTYPES... EG: 
-(void)shareOnTwitter:(NSString *)text withUrl:(NSURL *)url withImage:(UIImage *)image; 
@end 

和實現他們相應的.m文件:

@implementation UIViewController (CategoryName) 
// IMPLEMENTATIONS... EG: 
-(void)shareOnTwitter:(NSString *)text withUrl:(NSURL *)url withImage:(UIImage *)image { 
    // Code... 
} 
@end 

(請注意,當您在XCode中聲明新文件時,它具有可以使用的「類別」模板。)

現在,無論何時您導入.h文件,UIViewController作爲一個類將包含您將其擴展的方法!

Here's關於我在快速谷歌搜索中找到的類別的教程。

+0

謝謝..我用NSString類,我很適合我...現在什麼我應該使用這個類別...? UIView或UIViewController ...? +1教程.. – user777304

+0

在你的問題中,你表示你想將該方法添加到UIViewController類。我寫的示例代碼顯示了UIViewController的一個類別。你爲什麼使用NSString類? –

+0

NSString用於檢查一個字符串是否包含指定的字符串。或用於從字符串中剪切任何給定的文本。還有更多...謝謝我會嘗試uiviewcontroller以及... – user777304

1

做一個委託,你會在YourTwitterClass.h

01添加此之上的接口聲明
@protocol YourTwitterDelegate <NSObject> 
-(void)delegteMethod; 
@end 

你會做這樣的事情通過繼承NSObject

//In YourTwitterClass.h 
//Twitter framework(needed but I don't know the name) 
#import <Twitter/Twitter.h> 
#import <UIKit/UIKit.h> 

@interface YourTwitterClass : NSObject 

@property (nonatomic) id<YourTwitterDelegate> delegate;  
-(void)shareOnTwitter:(NSString *)text withUrl:(NSURL *)url withImage:(UIImage *)image delegate:(id<YourTwitterDelegate>)del; 

@end 


//in YourTwitterClass.m 
@implementation YourTwitterClass 
-(void)shareOnTwitter:(NSString *)text withUrl:(NSURL *)url withImage:(UIImage *)image delegate:(id<YourTwitterDelegate>)del{ 
_delegate = del; 
[_delegate delegateMethod];//calls the delegate method 
//do twitter stuff 
} 

,然後在您的視圖控制器

//import "YourTwitterClass.h" 

- (IBAction)socialBtn:(id)sender 
{ 
YourTwitterClass *t = [[YourTwitterClass alloc] init]; 
[t shareOnTwitter:@"This is Text" withUrl:nil withImage:nil]; 
} 
//and the delegate method 
-(void)delegateMethod{ 
NSLog(@"This is a delegate method!); 
} 

在你ViewController.h文件中,你也把它添加到接口聲明

編輯 如果你想添加的發言權委託,郵件作曲家,添加代理該類

@interface ViewController : UIViewController <MFMailComposeViewControllerDelegate> 
//or 
@interface YourTwitterClass : NSObject <MFMailComposeViewControllerDelegate> 
+0

代表是否也能正常工作? – user777304

+0

@ user777304我在我的答案中加了一個代表 –

+0

非常感謝......我瞭解了它..但我正在談論框架代表。例如.. - (void)mailComposeController:(MFMailComposeViewController *)mailController didFinishWithResult:(MFMailComposeResult)結果錯誤:(NSError *)錯誤{N95tring * msg1; – user777304

2

創建NSObject的諸如此類,

@interface YourClassName : NSObject 
. 
. 
. // put all methods and ivar..etc that your need. (in Proper way) 
. 
. 

,並把所有方法它(在.m file體法)

而就#import "YourClassName.h"繼承吧。

和你訪問所有功能是放在YourClassName類。

+0

代表們是否也能正常工作? – user777304

+0

哪個委託方法?是的YourClassName類的自定義委託它的工作原理:) – iPatel

+0

沒有不定製...像這樣 - (void)mailComposeController:(MFMailComposeViewController *)mailController didFinishWithResult:(MFMailComposeResult)結果錯誤:(NSError *)錯誤{N95tring * msg1; – user777304

0

的答案使它比它到底是什麼更復雜:

你需要創建一個NSObject類如上一個mytweet.h和mytweet.m

在UIViewController方法,你需要實例創建的自定義類:

#import Mytweet.h; 

....

-(void) viewDidload { ... 

    } 

然後調用方法如下:

-(IBACTION) Handletweet{ 

     Mytweet *a = [[Mytweet alloc] init]; 
     Bool ABC = [Mytweet custom_method1:parameter1 p2:parameter2];} 

與目標C任何你需要記住的對象具有有效期它獲得創建和(與ARC自動)公佈,所以任何參數,你需要在自定義類的生命週期之外生活,需要在自定義類之外創建並作爲參數傳遞。

 Mytweet *a = [[Mytweet alloc] init]; 
     a.parameter1 = value; 

凡在我tweet.h

 @property (nonatomic,strong) NSString *parameter1; 

回覆:委託 - 委託方法是通過調用類重寫書寫方法的一種方式,這是典型的蘋果或第三方框架類,因爲整個源代碼可能不會向您開放,對於自定義類,您不需要它們只是自定義並向自定義類添加方法,只要您想要,就會發現此結果的代碼更清晰

相關問題