我正在从事社交媒体类型的项目,我正面临一个严重的问题。
此项目在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会再次分配给该特定文本字段。
答案 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
。
我希望这就是你要找的东西。