【问题标题】:How to set "if there is text in text view"如何设置“如果文本视图中有文本”
【发布时间】:2023-03-16 08:02:01
【问题描述】:

我有一个UIButton,当用户进入视图控制器时它是灰色的。还有一个UITextView。如果用户在UITextView 中输入文本,则按钮应变为红色,但如果文本视图为空白,则按钮为灰色。如果正在考虑做类似下面的事情,如果用户输入文本,它会将颜色更改为红色,但如果用户删除文本,它会保持红色而不是变回灰色。这是我正在使用的代码:

- (void)textViewDidChange:(UITextView *)textView {

if (self.textView.text.length == 0) {
    self.navigationItem.rightBarButtonItem.tintColor = [UIColor colorWithRed:193/255.5 green:193/255.0 blue:193/255.0 alpha:1.0];
}else{

    self.navigationItem.rightBarButtonItem.tintColor = [UIColor redColor];
}

if (self.titleView.text.length == 0) {
    self.navigationItem.rightBarButtonItem.tintColor = [UIColor colorWithRed:193/255.5 green:193/255.0 blue:193/255.0 alpha:1.0];
}else{

    self.navigationItem.rightBarButtonItem.tintColor = [UIColor redColor];
}

NSLog(@"Typing has stopped");

}

【问题讨论】:

    标签: ios objective-c uitextview uitextviewdelegate


    【解决方案1】:

    使用if (self.textView.text.length == 0) 而不是检查文本是否为空。

    【讨论】:

    • 这可行,但您必须关闭键盘才能使按钮更改颜色。我希望按钮在输入任何类型后更改颜色
    • 那么你使用了错误的UITextView委托方法。 -textViewDidEndEditing 在响应者(即键盘)辞职时被调用。尝试改用-textViewDidChange
    • 再次完美运行。最后一个问题(很抱歉问了多个问题)我现在有第二个文本视图,如果两个 textView 都包含文本,我只希望按钮更改颜色。现在当两个 textView 都有文本时,按钮仍然是灰色的。我更改了上面使用的代码
    • 试试(if (self.textView.text.length != 0) && (self.titleView.text.length !=0))
    • 另外,为了将来参考,请勿更改您在原始问题中发布的代码,因为如果您这样做了,那么该帖子对其他查看者没有意义。
    【解决方案2】:

    对于 Swift 3:

    if (self.textView.text.characters.count == 0)

    【讨论】:

      【解决方案3】:

      您可以将按钮图像绑定到文本视图值,然后根据是否有输入使用值转换器放入不同颜色的图像。

      代码适用于 OSX,但希望它具有适应性。

      @implementation DBHasTextImageTransformer
      
      - (id)init
      {
        self = [super init];
        if (self) {
          // Initialization code here.
        }
      
        return self;
      }
      
      
      + (Class)transformedValueClass
      {
        return [NSImage class];
      }
      
      
      + (BOOL)allowsReverseTransformation
      {
        return NO;
      }
      
      
      - (id)transformedValue:(id)value
      {
      
        if ((value == NULL) || [value isEqualToString:@""]) {
      
          return [NSImage imageNamed: @"NoTextImage"];
      
        } else {
      
          return [NSImage imageNamed: @"HasTextImage"];
      
        }
      
      }
      
      
      @end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-07
        • 1970-01-01
        • 1970-01-01
        • 2012-06-21
        • 2016-12-07
        相关资源
        最近更新 更多