【发布时间】:2011-04-02 00:57:14
【问题描述】:
我有一个带有 NSTextField 控件、一个确定按钮和一个取消按钮的模式表。 OK 按钮绑定到我的控制器类中名为 theSheetOK 的操作方法。我还将 NSTextField 控件绑定到我的控制器(文件所有者)中名为 foo 的 NSString 成员,并使用键值绑定来读取文本用户输入的值(即绑定检查器中文本字段的模型键路径设置为 foo)。
如果输入文本并且用户通过键盘点击“确定”按钮,则一切正常。当我在 theSheetOK 处理程序中使用 NSLog 跟踪 foo 的值时,我看到了我刚刚在文本字段中键入的值。
但是,当我用鼠标单击“确定”按钮时,foo 的值被记录为空,而且只要我单击“确定”按钮,文本字段控件就会抓住焦点,而我的文本typed 出现选中。任何想法出了什么问题?
@interface MyController : NSWindowController {
@private
NSString *foo;
}
@property (copy, readwrite)NSString* foo;
-(IBAction) theSheetOK:(id)sender;
-(IBAction) theSheetCancel:(id)sender;
@end
...
#import "MyController.h"
@implementation MyController
@synthesize foo;
-(IBAction) theSheetOK:(id)sender
{
NSLog(@"theSheetOK");
NSLog(@"foo= %@", foo);
...
NSWindow* theSheet = [self window];
[NSApp endSheet:theSheet returnCode: NSOKButton];
[theSheet orderOut:nil];
【问题讨论】:
-
我认为比持续更新更好的解决方案是在确定按钮所针对的操作方法中“结束编辑”。有关示例实现,请参阅此问题:stackoverflow.com/questions/9951255/…
标签: cocoa cocoa-bindings