Cocoa 强制调用委托方法
我有一个Cocoa 强制调用委托方法,cocoa,delegates,nsnotificationcenter,nssplitview,Cocoa,Delegates,Nsnotificationcenter,Nssplitview,我有一个NSSplitView的委托方法,如下所示: - (void)splitViewWillResizeSubviews:(NSNotification *)aNotification { NSLog(@"RESIZE!"); } 每当我拖动分隔符时,都会调用此方法,因此它已正确注册。我想从另一个对象调用它,并且正在考虑使用它: [[NSNotificationCenter defaultCenter] postNotificationName:NSSplitViewWillRes
NSSplitView
的委托方法,如下所示:
- (void)splitViewWillResizeSubviews:(NSNotification *)aNotification
{
NSLog(@"RESIZE!");
}
每当我拖动分隔符时,都会调用此方法,因此它已正确注册。我想从另一个对象调用它,并且正在考虑使用它:
[[NSNotificationCenter defaultCenter] postNotificationName:NSSplitViewWillResizeSubviewsNotification object:self];
根据Apple文档,这是调用委托方法时应该发送的通知。但是,它不起作用。有人知道我做错了什么吗?您可以手动调用该方法
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];
原来我需要为
NSSplitViewWillResizeSubviewsNotification
通知手动注册委托类
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(splitViewWillResizeSubviews:)
name:NSSplitViewWillResizeSubviewsNotification
object:vc];
其中vc是应发送通知的viewcontroller
(对我来说)这是意外的行为,因为
预期会自动注册NSSplitView…
通知。是否要将splitViewWillResizeSubviews
的实现公开给另一个类?或者您希望从另一个类中的NSSplitView获得额外的通知?我想从另一个对象手动通知代理,即用户不调整splitview部分的大小。我想从其中一个子视图的viewcontroller调用splitViewWillResizeSubviews
。我没有从那里优雅地引用splitView本身(虽然我总是可以“手动”传递它。我想避免后者,但如果必要,我想直接调用该方法是可能的。关于第二个选项:为什么我问题中的self
需要是splitView?-(无效)postNotificationName:(NSString*)notificationName对象:(id)notificationSender
;我对通知没有任何经验,但发件人是否应该不是我发布通知的类?notificationSender
是发送通知的类,而不是接收通知的类。NSNotificationCenter管理向哪些类发送通知。