我有第一个viewController
“ SFCrearMomentoViewController”,第二个视图是tableViewController
“ MasterViewController”。我需要选择一行didSelectRowAtIndexPath
并调用在我的“第一个viewController”中实现的方法didCelected
,然后使用dismissViewControllerAnimated
关闭视图。
问题是方法didCelected
从未被调用。我已经在使用“两个viewControllers”的测试项目中测试了此代码,它可以工作,但是我不知道当前项目中的问题是什么。SFCrearMomentoViewController.h
...
#import "MasterViewController.h"
@interface SFCrearMomentoViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITextViewDelegate, MasterViewControllerDelegate>{
UIImagePickerController *picker;
}
...
SFCrearMomentoViewController.m
...
-(void)didSelected:(NSString *)nombre{
NSLog(@"didSelected method %@", nombre);
}
@end
MasterViewController.h
#import <UIKit/UIKit.h>
@protocol MasterViewControllerDelegate <NSObject>
@required
-(void) didSelected:(NSString *)nombre;
@end
@interface MasterViewController : UITableViewController
@property (weak, nonatomic) id <MasterViewControllerDelegate> delegate;
@end
MasterViewController.m
...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[self.delegate didSelected:@"row selected"];
[self dismissViewControllerAnimated:YES completion:nil];
}
...
解决方案:我必须设置代表自我。我在Segue中实现了它。
-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.destinationViewController isKindOfClass:[MasterViewController class]]) {
MasterViewController *nextView = segue.destinationViewController;
nextView.delegate = self;
}
}
最佳答案
您需要在SFCrearMomentoViewController中设置委托,例如,可以在viewDidLoad中进行设置。
masterViewController.delegate = self;
我假设您分配并初始化了MasterViewController类型的新masterViewController对象。