开发者社区 问答 正文

当试图在UISearchBar中更改颜色时,ClearButton图像为零

我正在尝试更新清除按钮的颜色,但是当我使用这段代码时,IMG是零。其他人则可以很好地使用这段代码。我怎样才能得到清晰的按钮?

UITextField *textField = (UITextField*)[self.uiSearchBar valueForKey:@"searchField"];
UIButton *btnClear1 = [textField valueForKey:@"_clearButton"];
UIImage * img = [btnClear1 imageForState:UIControlStateNormal];

展开
收起
游客5akardh5cojhg 2019-12-05 13:12:50 343 分享 版权
阿里云 AI 助理回答

看起来你是在尝试自定义iOS中UITextField搜索栏的清除按钮颜色。你的代码尝试通过KVC(键值编码)来访问UITextField的私有属性,这在苹果的文档中是不被推荐的,因为这些私有属性和方法可能会在未来的iOS版本中改变或移除。

为了实现你的需求并保持代码的兼容性与稳定性,建议使用UIAppearance协议来自定义UITextField的清除按钮。虽然直接修改_clearButton的image比较直接,但遵循官方推荐的做法更安全。不过,不幸的是,UITextField并没有直接提供修改其内置清除按钮图片的公共API。

一个变通的方法是隐藏系统的清除按钮,并添加一个自定义的UIButton作为子视图到UITextField上,这样你可以完全控制这个按钮的外观,包括它的图片、颜色等。以下是一个简单的示例:

// 隐藏系统清除按钮
textField.clearButtonMode = UITextFieldViewModeNever;

// 创建自定义清除按钮
UIButton *customClearButton = [UIButton buttonWithType:UIButtonTypeCustom];
[customClearButton setImage:[UIImage imageNamed:@"yourCustomClearImage"] forState:UIControlStateNormal];
customClearButton.frame = CGRectMake(textField.frame.size.width - 44, textField.frame.origin.y + 6, 30, 30); // 根据需要调整frame
[customClearButton addTarget:self action:@selector(clearTextField:) forControlEvents:UIControlEventTouchUpInside];

// 添加到UITextField
[textField.rightView addSubview:customClearButton];
textField.rightViewMode = UITextFieldViewModeAlways;

// 自定义清除按钮的方法
- (void)clearTextField:(UIButton *)sender {
    textField.text = @"";
}

这段代码首先隐藏了UITextField的默认清除按钮,然后创建了一个自定义的UIButton,设置了它的图片,并将其添加为UITextField的rightView。当点击这个自定义按钮时,会调用clearTextField:方法清空textField的内容。

请确保替换@"yourCustomClearImage"为你想要的清除按钮图片名称,并根据你的界面设计调整按钮的位置和大小。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: