委托方法没有响应
Posted
技术标签:
【中文标题】委托方法没有响应【英文标题】:Delegate methods not responding 【发布时间】: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 是一只狡猾的野兽;)
【参考方案1】:
原来我的destinationViewController
实际上是navigationController
,所以代理设置不正确。感谢 remus 告诉我设置断点以检查委托是否设置正确。
我通过写作修复了它
SettingsTableViewController *stvc = ((UINavigationController *)[segue destinationViewController]).viewControllers[0];
改为。
【讨论】:
以上是关于委托方法没有响应的主要内容,如果未能解决你的问题,请参考以下文章
UIPopoverPresentationController 中的视图委托没有响应
UIScrollViewDelegate 中的委托方法不响应表格视图滚动事件