2013-03-30 54 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; 

回复:委托 - 委托方法是通过调用类重写书写方法的一种方式,这是典型的苹果或第三方框架类,因为整个源代码可能不会向您开放,对于自定义类,您不需要它们只是自定义并向自定义类添加方法,只要您想要,就会发现此结果的代码更清晰

相关问题