【发布时间】:2014-06-13 22:21:11
【问题描述】:
我在让 viewcontroller 响应 modal viewcontroller 内的操作时遇到了一些问题。
我有一个带有设置按钮的侧边栏。此按钮显示一个设置 viewcontroller modally,我希望我的侧边栏在用户点击我的设置viewcontroller 上的注销 按钮时做出响应。
在我的settingsTableViewController.h 中,我这样设置委托:
@class SettingsTableViewController;
@protocol SettingsTableViewControllerDelegate <NSObject>
- (void)loggedOutUser:(SettingsTableViewController *)viewController;
@end
@interface SettingsTableViewController : UITableViewController
@property (nonatomic, weak) id <SettingsTableViewControllerDelegate> delegate;
....
然后在settingsTableViewController.m我合成委托并像这样调用委托方法:
@synthesize delegate;
....
- (IBAction)logOut:(id)sender {
[self.delegate loggedOutUser:self];
....
}
此外,在我回复menuTableViewController.h 时,我是这样设置的:
@interface MenuTableViewController : UITableViewController <SettingsTableViewControllerDelegate>
最后我在menuTableViewController.m 的prepareForSegue 方法中设置了委托:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
....
if ([[segue identifier] isEqualToString:@"settingsSegue"]) {
SettingsTableViewController *stvc = [segue destinationViewController];
stvc.delegate = self;
}
....
}
我根本无法弄清楚是什么原因造成的。
我的猜测是stvc.delegate = self 没有做它应该做的事情,因为menuTableViewController 也响应另一个viewcontroller 的代表(不是模态的),在这里我必须设置delegate = self 在viewDidLoad 方法,但在 [self viewDidLoad] 调用之前,因为将它放在之后不起作用。
任何可以解决此问题的帮助将不胜感激!我已经为此苦苦挣扎了太久了...谢谢!
【问题讨论】:
-
如果您在 prepareForSegue 中设置断点,您的委托是否已设置?
-
该死,原来目标视图控制器是一个导航控制器,因此代理设置不正确。我改写
((UINavigationController *)[segue destinationViewController]).viewControllers[0]来修复它。我怎么没想到?!!谢谢一百万! -
????答对了!因为 prepareForSegue 是一只狡猾的野兽;)
标签: ios objective-c delegates protocols modalviewcontroller