0

我的代码中有几个不同的类,它们使用相同的方法——导致很多重复的行——我最近发现添加类别可以有效解决问题。举一个较小的例子,我以前的方法(通常)以传统方式调用,如下所示:

if((thisNum=[self valueInTextField:ctr]) != 0)
    //... do stuff here...

- (int)valueInTextField:(int)tagNum
{
    NSTextField *field = [[prizeWindow contentView] viewWithTag:tagNum];
    int value = [field intValue];

    return value;
}

我删除了上述方法并添加了类别:

@implementation NSTextField(GetFieldValue)
- (int)valueInTextField
{
    NSTextField *field = [[[self window] contentView] viewWithTag:tagNum]; // DOESN'T LIKE THIS!!
    return [self intValue];
}
@end

但是,它不喜欢我要求它使用 [[self window] contentView] 查找 textField 本身,所以我可以让它工作的唯一方法是(显然)删除有问题的行并传递类似的内容:

if([[[[self window]contentView]viewWithTag:ctr] valueInTextField] != 0)

我相信您可以在这里看到我想要实现的目标。有什么方法可以让我获得一个类别来识别上面提示的必填字段 - 即无需亲自通过它?提前致谢 :-)

4

2 回答 2

2

如果您发现自己需要该方法用于许多窗口或窗口控制器,那么将您的类别放在其中一个类上的正确位置。例如:

@implementation NSWindow(GetFieldValue)
- (int)valueInTextFieldWithTag:(int)tag
{
  NSTextField *field = [[self contentView] viewWithTag:tag];
  return [field intValue];
}
@end
于 2010-03-07T15:40:38.030 回答
2

但是,它不喜欢我要求它使用 [[self window] contentView] 来查找 textField 本身

您为每个通过类别添加了一个- (int)valueInTextField方法。 作为实例方法,您已经需要一个文本字段对象来调用它。 在文本字段本身中搜索文本字段没有任何意义。(鸡和蛋的困境)NSTextField
valueInTextField

- (int)valueInTextField
{
    NSTextField *field = [[[self window] contentView] viewWithTag:tagNum]; // DOESN'T LIKE THIS!!
    return [self intValue];
}

如上所述,在此处搜索文本字段将不起作用,因为您已经在文本字段中。
除此之外,无论如何您都没有在此处使用字段变量。

你有多少个文本字段?
使用 ivars 和 outlets 管理您的文本字段可能比通过标签搜索它们更容易。

于 2010-03-07T08:51:42.613 回答