1

我有几个文本字段,每个都有标签,我想单独添加到数组中。在添加之前,我需要弄清楚它来自哪个字段。我想对所有这些都使用相同的方法,而不是为每个文本字段使用一个方法。

是否可以从发件人那里获取文本字段的变量名称?如果它们是按钮,我可以使用 [sender currentTitle],但我不知道如何从文本字段中获取标识符。

我在想这样的事情:

- (void)makeItSo:(id)sender
{
    NSString * senderName = (UITextField*)[sender stringValue] ;
    if ([senderName isEqual: @"name"] )
        -- add name to array
    else if ([senderName isEqual: @"address"] )
        -- add address to array
}
4

3 回答 3

6

如果你给每个文本字段一个标签,然后使用标签:

- (void)makeItSo:(UITextField *)sender {
    if (sender.tag == 1) {
        // the name text field
    } else if (sender.tag == 2) {
        // the address text field
    }
}

这假设您已经tag在 IB 或代码中为每个文本字段设置了属性。

为每个标签定义常量可能很有用,因此您最终会得到更易于阅读的内容:

#define kNameTextField 1
#define kAddressTextField 2

- (void)makeItSo:(UITextField *)sender {
    if (sender.tag == kNameTextField) {
        // the name text field
    } else if (sender.tag == kAddressTextField) {
        // the address text field
    }
}

如果您有插座或实例变量,那么您可以执行以下操作:

- (void)makeItSo:(UITextField *)sender {
    if (sender == _nameTextField) {
        // the name text field
    } else if (sender == _addressTextField) {
        // the address text field
    }
}

where_nameTextField_addressTextFields是文本字段的 ivars。

于 2013-03-22T22:53:10.203 回答
1

是否可以从发件人那里获取文本字段的变量名称?

不,除非它是一个实例变量,在这种情况下你可以,但你最好不要。

我不知道如何从文本字段中获取标识符

与往常一样,阅读文档就足够了,因为它使用了以下tag属性UIView

if ([sender tag] == SOME_CUSTOM_PRESET_VALUE) {
    // do stuff
}
于 2013-03-22T22:51:40.237 回答
0

例如,您可能将这些文本字段作为 ivars:

@property (weak) UITextField* textField1;  // tag=1
@property (weak) UITextField* textField2;  // tag=2
...
@property (weak) UITextField* textFieldN;  // tag=N

当您收到一个操作时,您只需执行以下操作:

- (void)makeItSo:(id)sender
{
    // This is the searched text field
    UITextField* textField= [self valueForKey: [NSString stringWithFormat: @"textField%d",sender.tag] ];  
}

但是在这一点上,为什么不使用单个属性,它是一个包含 N 个文本字段的数组,而不是 N 个属性?

于 2013-03-22T22:57:08.893 回答