委托方法没有响应

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.mprepareForSegue 方法中设置了委托:

- (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 = selfviewDidLoad 方法,但在 [self viewDidLoad] 调用之前,因为将它放在之后不起作用。

任何可以解决此问题的帮助将不胜感激!我已经为此苦苦挣扎了太久了...谢谢!

【问题讨论】:

如果您在 prepareForSegue 中设置断点,您的委托是否已设置? 该死,原来目标视图控制器是一个导航控制器,因此代理设置不正确。我改写((UINavigationController *)[segue destinationViewController]).viewControllers[0] 来修复它。我怎么没想到?!!谢谢一百万! ????答对了!因为 prepareForSegue 是一只狡猾的野兽;) 【参考方案1】:

原来我的destinationViewController 实际上是navigationController,所以代理设置不正确。感谢 remus 告诉我设置断点以检查委托是否设置正确。

我通过写作修复了它

SettingsTableViewController *stvc = ((UINavigationController *)[segue destinationViewController]).viewControllers[0];

改为。

【讨论】:

以上是关于委托方法没有响应的主要内容,如果未能解决你的问题,请参考以下文章

UIPopoverPresentationController 中的视图委托没有响应

PushSharp - 多个无效令牌不调用响应委托

UIScrollViewDelegate 中的委托方法不响应表格视图滚动事件

PopoverPresentationController 内部的 UITextView 不响应其委托方法

Swift UI 委托方法不起作用

Swift - 委托协议结构