Car*_*osa 15 user-interface cocoa
我需要将NSTextField与NSStepper一起作为一个控件,以便我可以通过直接在文本字段上更改它或使用步进向上/向下箭头来编辑整数值.
在IB中,我添加了这两个控件,然后将NSStepper的takeIntValueFrom连接到NSTextField,这使得每次单击步进箭头时文本值都会更改.问题是,如果我编辑文本字段然后再次单击步进器,它将忘记我手动编辑的值并使用步进器的内部值.
每当文本字段值更改时,更新步进器值的最佳/最简单方法是什么?
mou*_*iel 15
我会有一个带有一个整数变量的模型,它表示两个控件的值.
在我的控制器中,我将使用一个连接到两个控件的IBAction和两个IBOutlet,每个控件一个.然后我会有一个从模型值更新出口的方法.
IBOutlet NSStepper * stepper;
IBOutlet NSTextField * textField;
- (IBAction) controlDidChange: (id) sender
{
[model setValue:[sender integerValue]];
[self updateControls];
}
- (void) updateControls
{
[stepper setIntegerValue:[model value]];
[textField setIntegerValue:[model value]];
}
Run Code Online (Sandbox Code Playgroud)
这是原则.正如Peter Hosey所说,格式化程序可能对您的文本字段很有用,至少要考虑步进器的最小值和最大值.
我发现简单的方法是将步进值绑定到输入和输入值到步进器
@property (strong) IBOutlet NSTextField *timeInput;
@property (strong) IBOutlet NSStepper *timeStepper;
Run Code Online (Sandbox Code Playgroud)


如果要跟踪某个模型中字段的值(例如当前页码),则无需在步进控件中保留另一个副本.我只是将控件配置为初始值为0,范围从-1到1.在步进控件的IBAction方法中,对控件的任何单击(或自动重复)调用,请求它的当前值,如果单击向上箭头,则为1,向下箭头为-1.立即将控件的当前值重置为0,然后使用基于方向1或-1的新值更新模型和其他任何内容(关联的文本字段或新的页面视图等).例如,
- (IBAction) bumpPageNum:(id)sender
{
int whichWay = [sender intValue]; // Either 1 or -1
[sender setIntValue:0]; // Same behavior next time
[model changePageBy:whichWay];
}
Run Code Online (Sandbox Code Playgroud)
这样,步进控件根本不必链接到模型中的任何值.
| 归档时间: |
|
| 查看次数: |
12797 次 |
| 最近记录: |