首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重写UITextField getter-setter

重写UITextField getter-setter
EN

Stack Overflow用户
提问于 2015-08-04 08:25:48
回答 4查看 1.3K关注 0票数 2

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

这个项目在iTunes上运行了2年,所以很多用户的数据已经在服务器DB中了。

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

代码语言:javascript
复制
self.autocapitalizationType = UITextAutocapitalizationTypeWords;

但是现有的数据呢?当现有的用户开始编辑时,我在textfield中显示的数据呢?

我已经在UItextField文本中应用了颜色和字体一致性的类别,但是如何覆盖UItextFiled设置器方法?

或者建议我换个方法。因为有超过100个文本文件,我如何处理它?有很多类,而不是为每个类编写代码--什么是更好的解决方案?

我在UItextField+CustomText类别中写了这段代码。

代码语言:javascript
复制
- (void)setText:(NSString *)str {    

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

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

EN

回答 4

Stack Overflow用户

发布于 2015-08-04 08:49:05

也许你可以用目标来改变:

代码语言:javascript
复制
[textField addTarget:self 
          action:@selector(textFieldDidChange:) 
forControlEvents:UIControlEventEditingChanged];

更好的方法是在textfield autocapitalizationType中设置

代码语言:javascript
复制
self.textfield.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters;
票数 1
EN

Stack Overflow用户

发布于 2015-08-05 02:04:35

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

代码语言:javascript
复制
- (void)setText:(NSString *)str {    
   strUpperCase= uppercase code
  _str = strUpperCase;// or str = strUpperCase; // One of this
}
票数 1
EN

Stack Overflow用户

发布于 2016-04-13 05:54:54

只需在覆盖范围内调用主管的方法:

代码语言:javascript
复制
- (NSString *)text 
{    
    // do your extra stuff here
    //  ...

    return [super text];
}

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

    // do your extra stuff here
    //  ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31804271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档