当前位置:  开发笔记 > IOS > 正文

如何在Objective-C中使用自定义委托

如何解决《如何在Objective-C中使用自定义委托》经验,为你挑选了2个好方法。

我需要了解Objective-C中委托方法的用法.谁能指出我正确的来源?



1> Jonathan Ste..:

您需要为您的类声明委托协议.类的委托协议和接口的示例Foo可能如下所示:

@class Foo;
@protocol FooDelegate 
@optional
- (BOOL)foo:(Foo *)foo willDoSomethingAnimated:(BOOL)flag;
- (void)foo:(Foo *)foo didDoSomethingAnimated:(BOOL)flag;
@end

@interface Foo : NSObject {
     NSString *bar;
     id  delegate;
}

@property (nonatomic, retain) NSString *bar;
@property (nonatomic, assign) id  delegate;

- (void)someAction;

@end

别忘了合成你的房产@implementation.

这段代码的作用是声明一个名为FooDelegate的协议; 符合此协议的类将被声明为@interface SomeClass : SuperClass {}.因为这个类符合协议FooDelegate,所以它现在可以实现下面的方法FooDelegate(要求实现这些方法,@required而不是使用它们@optional).最后一步是Foo在符合的类中对象进行实例化FooDelegate,并为此Foo对象设置其delegate属性:

Foo *obj = [[Foo alloc] init];
[obj setDelegate:self];

现在,您的类已准备好接收来自Foo正确设置其委托的对象的消息.


@Filipe啊,是的,这有点令人困惑.实际上,`@protocol Blah `的括号内部表示*protocol*``继承自*protocol*``.要获得的一个关键点是有一个类'NSObject`以及一个协议``.

2> iCrazyDev..:

代理对于手动控制应用程序中视图控制器数组内的传输非常有用.使用代理,您可以很好地管理控制流程.

这是自己代表的一个小例子....

    创建协议类....(仅限.h)

SampleDelegate.h

#import
@protocol SampleDelegate
@optional

#pragma Home Delegate

-(NSString *)getViewName;

@end

    在要为其他类委托的类中导入上面的协议类.在我的前任.我使用AppDelegate来创建HomeViewController的Object的委托.

还在Delegate Reference <>中添加了DelegateName

ownDelegateAppDelegate.h

#import "SampleDelegate.h"

@interface ownDelegateAppDelegate : NSObject 
{


}

ownDelegateAppDelegate.m

//setDelegate of the HomeViewController's object as
[homeViewControllerObject setDelegate:self];

//add this delegate method definition
-(NSString *)getViewName
{
    return @"Delegate Called";
}

HomeViewController.h

#import
#import "SampleDelegate.h"

@interface HomeViewController : UIViewController 
{

    iddelegate;
}

@property(readwrite , assign) iddelegate;

@end

HomeViewController.h

- (void)viewDidAppear:(BOOL)animated 
{

    [super viewDidAppear:animated];
    UILabel *lblTitle = [[UILabel alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    lblTitle.text = [delegate getViewName];
    lblTitle.textAlignment = UITextAlignmentCenter;
    [self.view addSubview:lblTitle];

}

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有