Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何为使用uiviewcontroller的方法创建类_Ios_Objective C - Fatal编程技术网

Ios 如何为使用uiviewcontroller的方法创建类

Ios 如何为使用uiviewcontroller的方法创建类,ios,objective-c,Ios,Objective C,我在想,我怎样才能为twitter、facebook或任何东西上一堂课。所以我只需将该类导入到我的项目中,它就可以开始使用一个代码。例如如果我使用twitter框架,那么我必须编写它的函数。我只想为这个函数创建一个类,通过导入它,它将在我未来的所有项目中工作。 例如: 任何类别或任何东西: -(void)shareOnTwitter:(NSString *)text withUrl:(NSURL *)url withImage:(UIImage *)image { // ALL TWITT

我在想,我怎样才能为twitter、facebook或任何东西上一堂课。所以我只需将该类导入到我的项目中,它就可以开始使用一个代码。例如如果我使用twitter框架,那么我必须编写它的函数。我只想为这个函数创建一个类,通过导入它,它将在我未来的所有项目中工作。 例如:

任何类别或任何东西:

-(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];
}
更新:只是尝试了分类方式,但没有回复,知道我错在哪里吗?:

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

            [self shareOnTwitter:title withUrl:url 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
mainViewController:

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

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

要进行委托,您需要在
YourTwitterClass.h

@protocol YourTwitterDelegate <NSObject>
-(void)delegteMethod;
@end
然后在视图控制器中

//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>
@界面ViewController:UIViewController
//或
@接口YourTwitterClass:NSObject

创建
NSObject

@interface YourClassName : NSObject
.
.
. // put all methods and ivar..etc that your need. (in Proper way)
.
.
并将所有方法放入其中(方法体位于
.m文件中

只需将“YourClassName.h”导入你想要继承它的地方


您可以访问放入
YourClassName
类中的所有函数。

我相信这是一个可以使用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作为一个类将包含扩展它的方法


我通过谷歌快速搜索找到的关于类别的教程。

答案让它比实际情况更复杂:

您需要创建一个NSObject类,如上所述,包含一个mytweet.h和一个mytweet.m

在UIViewController方法中,需要实例化创建的自定义类:

#import Mytweet.h;

然后按如下方式调用这些方法:

 -(IBACTION) Handletweet{ 

      Mytweet *a = [[Mytweet alloc] init];
      Bool ABC = [Mytweet custom_method1:parameter1 p2:parameter2];}
与Objective C中的任何内容一样,您需要记住对象有一个生命周期,它会被创建和释放(使用ARC自动释放),因此任何需要在自定义类生命周期之外存在的参数都需要在自定义类之外创建并作为参数传递

      Mytweet *a = [[Mytweet alloc] init];
      a.parameter1 = value;
在我的tweet.h中的哪里

     @property (nonatomic,strong) NSString *parameter1;

Re:Delegate-Delegate方法是一种通过调用类重写书面方法的方法,这些方法在Apple或第三方框架类中是典型的,因为整个源代码可能不向您开放,对于自定义类,您不需要它们,只需自定义并向自定义类添加您想要的方法即可,您会发现,这会使代码更加清晰

哪种委托方法??是您的ClassName类的自定义委托它工作:)否不是自定义的。。。像这个一样-(void)mailComposeController:(MFMailComposeViewController*)mailController did finishwithresult:(mfmailcomposesult)result error:(NSError*)error{NSString*msg1;yes add relavent framework并将此方法添加到.h文件中,然后将主体放在.m文件中,这样您就可以访问它了:)我尝试了NSObject..但得到了这个错误“没有可见的界面…”在这一行…[自我呈现视图控制器:tweetSheet动画:是的完成:无]@user777304我在我的回答中添加了一个代理太感谢了…我学会了…但我说的是框架代理。比如…-(void)mailComposeController:(MFMailComposeViewController*)mailController没有完成结果:(MFMailComposeResult)结果错误:(NSError*)错误{NSString*msg1;我添加了一个示例,用于为自定义twitter类和视图控制器添加
MFMailComposeDelegate
。我尝试了NSObject..但在这一行上出现此错误“无可见界面…”…[自我呈现视图控制器:tweetSheet动画:是完成:无]如果您试图使用
presentViewController:animated
方法,则子类化的对象必须是
UIViewController
。如果您愿意,可以将
NSObject
替换为
UIViewController
,因为这样可以工作。谢谢..我使用了NSString类别,我非常适合我…现在是什么类别我应该使用此…?UIView还是UIViewController…??+1作为教程..在您的问题中,您表示希望将该方法添加到UIViewController类中。我编写的示例代码显示了UIViewController的一个类别。您使用NSString类别做了什么?NSString用于检查字符串是否包含指定的字符串。或用于cu从字符串中删除任何给定的文本。还有更多…谢谢我也会尝试uiviewcontroller…谢谢每一个人…特别是Chris Loonam,他学习了如何制作委托方法。。。。
      Mytweet *a = [[Mytweet alloc] init];
      a.parameter1 = value;
     @property (nonatomic,strong) NSString *parameter1;