强制调用委托方法

时间:2013-03-28 23:16:08

标签: cocoa delegates nsnotificationcenter nssplitview

我有NSSplitView的委托方法,如下所示:

- (void)splitViewWillResizeSubviews:(NSNotification *)aNotification
{
    NSLog(@"RESIZE!");
}

每当我拖动分隔符时都会调用此方法,因此它已正确注册。我想从另一个对象中调用它,并且正在考虑使用它:

[[NSNotificationCenter defaultCenter] postNotificationName:NSSplitViewWillResizeSubviewsNotification object:self];

根据Apple文档,这是应该发送以调用委托方法的通知。但是,它不起作用。有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:1)

您可以手动调用该方法

NSSplitView * yourSplitView; //Get reference to your splitview
id yourSplitViewDelegate = [yourSplitView delegate];
[yourSplitViewDelegate splitViewWillResizeSubviews:nil];//Optionally create the NSNotification with relevant data

如果您真的想通过通知中心,请确保问题中的self是NSSplitView。

NSSplitView * yourSplitView; //Get reference to your splitview
[[NSNotificationCenter defaultCenter] postNotificationName:NSSplitViewWillResizeSubviewsNotification object:yourSplitView];

答案 1 :(得分:0)

原来我需要手动注册NSSplitViewWillResizeSubviewsNotification通知的委托类!

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(splitViewWillResizeSubviews:)
                                                 name:NSSplitViewWillResizeSubviewsNotification
                                               object:vc];

其中vc是应该发送通知的viewcontroller。

这是意外行为(对我而言),因为<NSSplitViewDelegate>预计会自动注册NSSplitView...次通知。

相关问题