是否有可能在 Interface-Builder 中定义 属性 并在代码中读取此 属性 ?

Is it somehow possible to define a property in Interface-Builder and read this property in code?

我有三个 UITextField,我想限制它们的长度。第一个和第二个文本字段为 24 个字符,第三个文本字段为 32 个字符。

我发现 this solution for limiting the characters in a UITextField 效果很好:

#define MAXLENGTH 10

- (BOOL)textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSUInteger oldLength = [textField.text length];
    NSUInteger replacementLength = [string length];
    NSUInteger rangeLength = range.length;

    NSUInteger newLength = oldLength - rangeLength + replacementLength;

    BOOL returnKey = [string rangeOfString: @"\n"].location != NSNotFound;

    return newLength <= MAXLENGTH || returnKey;
}

但此解决方案表明,每个文本字段的长度都限制为相同(即代码段顶部定义的 10 个字符)。我想知道是否有机会在 XCode 的 Interface-Builder 中为我的每个文本字段分别定义某种 属性 ,这允许我在代码中读出 - 这样我可以将 "MAXLENGTH" 替换为类似“[textField valueForKey:@"maxLength"]” 的内容,其中 "maxLength" 将在 XCode Interface-Builder 中直观地定义...

有什么想法吗?

无法通过 Interface Builder 定义每个文本字段的最大长度,但您的代码中有一个简单的解决方案。

不使用 #define 作为最大长度,而是根据 textField 参数计算最大长度。

假设您的文本字段有三个出口,名称为 field1field2field3。然后你可以这样做:

- (BOOL)textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSUInteger maxLength = 24; // for field1 and field2
    if (textField == self.field3) {
        maxLength = 32;
    }

    // and now the rest of the processing
}