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

时间:2015-06-18 15:08:44

标签: ios properties uitextfield interface-builder

我有三个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中直观地定义......

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

没有办法通过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
}