覆盖UITextField getter-setter

时间:2015-08-04 08:25:49

标签: ios objective-c uitextfield getter-setter objective-c-category

我正在从事社交媒体类型的项目,我正面临一个严重的问题。

此项目在iTunes上已有2年,因此许多用户的数据已经在服务器数据库中。

现在我们的客户说每个TextFiled的文本的第一个字母必须是大写字母。我可以在UItextfiled类别中使用以下行来处理新用户输入。

self.autocapitalizationType = UITextAutocapitalizationTypeWords;

但现有数据呢?当现有用户进行编辑时,我在文本字段中显示的数据。

我在UItextField文本中应用了类别以用于颜色和字体包含但是我如何覆盖UItextFiled setter方法

或建议我任何其他方式。 因为有超过一百个文本文件,我该如何解决它? 有很多类而不是为每个类编写代码什么是更好的解决方案?

我在 UItextField + CustomText 类别中编写了此代码。

- (void)setText:(NSString *)str {    

   //str= uppercase code
  //self.text=str;     //this is recursive fn call
}

每次我将任何文本分配给任何文本字段(textfield.text)时都会调用此setter,但是如何修改str会再次分配给该特定文本字段。

4 个答案:

答案 0 :(得分:1)

也许您可以使用目标进行更改:

[textField addTarget:self 
          action:@selector(textFieldDidChange:) 
forControlEvents:UIControlEventEditingChanged];

更好的将在textfield autocapitalizationType

中设置
self.textfield.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;

答案 1 :(得分:1)

使用自定义设置器时,您需要直接设置iVar。另外,它将是与代码相同的递归无限堆栈。 在您的情况下,以下应该没问题

<?xml?>

答案 2 :(得分:1)

只需在你的替换中调用超级方法:

- (NSString *)text 
{    
    // do your extra stuff here
    //  ...

    return [super text];
}

- (void)setText:(NSString *)text
{
    [super setText:text];

    // do your extra stuff here
    //  ...
}

答案 3 :(得分:0)

您需要通过更新str值而不是通过此方法修改文本:

简单地调用此方法:

[self setText:@"ENTER TEXT"];

它的作用是调用方法&amp; str将使用new string&amp;更新这将再次分配给textField

我希望这就是你要找的东西。