
所以它几乎与Hillegass的书“Cocoa Programming for Mac OS X”(Download of the book’s examples)中的第29章相同,只不过NSTextFIEld设置为firstResponder.
有人能指出我正确的方法吗?
解决方法 您需要使用 – [NSWindow makeFirstResponder:]将文本字段设置为第一个响应者.由于这是一个NSWindow方法,因此只有在将相应视图添加到窗口后,即在将视图添加为窗口视图层次结构内的子视图之后,才有意义.在本书的示例中,当您将视图设置为窗口内框的内容视图时,会发生这种情况.例如:
- (voID)displayVIEwController:(ManagingVIEwController *vc) { // Try to end editing NSWindow *w = [Box window]; … // Put the vIEw in the Box NSVIEw *v = [vc vIEw]; [Box setContentVIEw:v]; // Set the first responder if ([vc class] == [VIEwController class]) { [w makeFirstResponder:[(VIEwController *)vc myTextFIEld]]; }} 这假定VIEwController公开了一个名为-myTextFIEld的getter方法.
通过让视图控制器公开一个返回视图控制器建议作为第一个响应者的对象的方法,可以使这更通用.就像是:
@interface ManagingVIEwController : NSVIEwController…- (NSResponder *)recommendedFirstResponder;@end@implementation ManagingVIEwController…- (NSResponder *)recommendedFirstResponder { return nil; }@end 并且,在您的ManagingVIEwController的具体子类中,让-recommendedFirstResponder返回应该是窗口的第一个响应者的对象:
@implementation VIEwController…- (NSResponder *)recommendedFirstResponder { return myTextFIEld; }@end 完成后,您可以将-displayVIEwController更改为:
- (voID)displayVIEwController:(ManagingVIEwController *vc) { // Try to end editing NSWindow *w = [Box window]; … // Put the vIEw in the Box NSVIEw *v = [vc vIEw]; [Box setContentVIEw:v]; // Set the first responder NSResponder *recommendedResponder = [vc recommendedFirstResponder]; if (recommendedResponder) [w makeFirstResponder:recommendedResponder];} 总结 以上是内存溢出为你收集整理的objective-c – NSViewController中的firstResponder全部内容,希望文章能够帮你解决objective-c – NSViewController中的firstResponder所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)