我有两个视图控制器,AbcViewController
和XyzViewController
。两个控制器的行为类似。每个按钮都有一个“添加”按钮,分别打开AddNewAbcViewController
和AddNewXyzViewController
。
在AddNewAbcViewController
上,当按下“提交”按钮时,它会填充必要的内容并关闭,然后将其恢复为AbcViewController
。我在这里使用委托AbcViewController
关闭AddNewAbcViewController
。这很有效。
现在我想对XyzViewController
和AddNewXyzViewController
执行相同的操作,但它不起作用。在AddNewXyzViewController
中调用btnSubmit时,它没有进入XyzViewController
dimiss方法。我已多次扫描我的代码,但没有找到任何额外的未添加。我甚至在XyzViewController
和AddNewXyzViewController
中给出了一个不同的解雇方法名称,但这也没有用。我错过了什么?
以下是我AbcViewController
和AddAbcViewController
的摘要。 Xyz的代码是相同的:
班级AddNewAbcViewController.h
是
#import <Foundation/Foundation.h>
// protocol
@protocol AddNewAbcProtocol <NSObject>
-(void)dismiss;
@end
@interface AddNewAbcViewController : UIViewController<UITextViewDelegate>
@property(nonatomic, weak)id<AddNewAbcProtocol> delegate;
@end
班级AddNewAbcViewController.m
是
@interface AddNewAbcViewController() <UINavigationControllerDelegate, UIImagePickerControllerDelegate>
...
@end
@implementation AddNewAbcViewController
...
- (IBAction)btnSubmit:(id)sender
{
[self.delegate dismiss];
}
@end
班级AbcViewController.h
是
#import <Foundation/Foundation.h>
#import "AddNewAbcViewController.h"
@interface AbcViewController : UIViewController<AddNewAbcProtocol, UISplitViewControllerDelegate>
...
@end
班级AbcViewController.m
是
@implementation AbcViewController
-(void)dismiss
{
NSLog(@"delegated to dismiss()");
[self dismissViewControllerAnimated:YES completion:nil];
}
@end
答案 0 :(得分:5)
正如大家所解释的那样,基本上你忘记了一行代码,比如“.delegate = self”。
这是一个方便的初学者介绍代表。
答案 1 :(得分:0)
使用if语句查看委托是否有效:
if ([self.delegate respondsToSelector:@selector(dismiss)])
{
[self.delegate dismiss];
}
将AddNewXyzViewController创建为实例变量,但不是局部变量。