我想我明白了一个委托背后的逻辑。 我得到了更多的使用它的问题。 多少个步骤组成? 我一定要利用现有的代表? 或者,我可以用我的一个人?
在我的例子我创建了许多同一类型的视图(对象/视图控制器)的AppDelegate中。 每个视图应该以某种方式呼吁AppDelegate中的方法来关闭本身。 当视图中的按钮按下时会发生这种事。 方法调用将包括视图(个体)的参考。
到目前为止,我知道,从其他语言的反应,事件侦听器等。 他们是如此的简单易用。
有谁能够帮我。 我只是发现了大量实例,在网络大量的代码。 它不能那么难只是调用父的目的C.
我想你应该使用这个NSNotificationCenter
在你AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
...
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(buttonPushed:) name:@"ButtonPushedNotification" object:nil];
}
- (void)applicationWillTerminate:(UIApplication *)application
{
...
...
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
这是选择时通报情况它会被称为(我们仍然在AppDelegate.m)
- (void)buttonPushed:(NSNotification *)notification {
NSLog(@"the button pushed...");
}
而在ViewController.m时按下的按钮(在方法内),你应该张贴这样的通知:
{
...
[[NSNotificationCenter defaultCenter] postNotificationName:@"ButtonPushedNotification" object:nil];
...
}
你可以创建自己的:
在MyView1.h:
@class MyView1;
@protocol MyView1Delegate <NSObject>
- (void)closeMyView1:(MyView1 *)myView1;
@end
@interface MyView1 : NSObject
{
id<MyView1Delegate> _delegate;
}
@property (assign, nonatomic, readwrite) id<MyView1Delegate> delegate;
...
@end
在MyView1.m:
@interface MyView1
@synthesize delegate = _delegate;
...
// The method that tells the delegate to close me
- (void)closeMe
{
....
if ([_delegate respondsToSelector:@selector(closeMyView1:)])
{
[_delegate closeMyView1:self];
}
}
@end
在AppDelegate.h:
#import "MyView1.h"
@interface AppDelegate <MyView1Delegate>
{
MyView1 *_myView1;
}
...
@end
在AppDelegate.m:
- (void)someCreateViewMethod
{
_myView1 = [[MyView1 alloc] initWithFrame:NSMakeRect(0, 0, 100, 200)];
[_myView1 setDelegate:self];
...
}
一个简单的方法来得到你想要的是只是一个视图启动。 然后,具有相互视图可以模态呈现。 当在视图中的按钮被按下做
[self dismissModalViewControllerAnimated:YES];
而且这里的东西我刚才做的时候我开始iPhone开发,可以帮助您与代表
Delegates
//In parent .m file:
//assign the delegate
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"segueName"])
{
childController *foo = segue.destinationViewController;
foo.delegate = self;
}
}
//implement protocol method(s):
- (void) methodName:(dataType*) dataName
{
//An example of what you could do if your data was an NSDate
buttonLabel.titleLabel.text = [[date description] substringToIndex:10];
}
//In parent .h file:
//import child header
#import "ChildName.h"
//indicate conformity with protocol
@interface ParentName : UIViewController <ChildNameDelegate>
//In child .h file
//declare protocol
@protocol ChildNameDelegate
- (void) methodName:(dataType*) dataName;
@end
//declare delegate
@property (unsafe_unretained, nonatomic) id<ChildNameDelegate> delegate;
//In child .m file
//synthesize delegate
@synthesize delegate;
//use method
- (IBAction)actionName:(id)sender
{
[delegate methodName:assignedData];
}