【发布时间】:2016-02-29 12:42:01
【问题描述】:
我正在尝试自定义搜索控制器中搜索栏的外观。
设置背景和文本颜色效果很好,但我只是没有找到改变文本字段中图标颜色的方法,特别是放大镜和 x 按钮。
我找到了这个 Objective-C 代码,它应该可以做我想做的事,但我正在努力将它翻译成 Swift:
(编辑:跳到有效的 Swift 3 解决方案的第一个答案。)
UITextField *searchBarTextField = [self.searchDisplayController.searchBar valueForKey:@"_searchField"];
// Magnifying glass icon.
UIImageView *leftImageView = (UIImageView *)searchBarTextField.leftView;
leftImageView.image = [LeftImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
leftImageView.tintColor = [UIColor whiteColor];
// Clear button
UIButton *clearButton = [searchBarTextField valueForKey:@"_clearButton"];
[clearButton setImage:[clearButton.imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
clearButton.tintColor = [UIColor whiteColor];
我尝试翻译成 Swift:
let textField = searchController.searchBar.valueForKey("searchField") as! UITextField
// These two work fine.
textField.backgroundColor = UIColor.blackColor()
textField.textColor = UIColor.blackColor()
var glassIcon = textField.leftView
// This would work.
//glassIcon.hidden = true
// This does not have any effect.
//glassIcon?.tintColor = UIColor.whiteColor()
// My attempt to translate, but it gives an error.
glassIcon.image? = UIImage.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)
var clearButton = textField.valueForKey("clearButton")!
clearButton.setImage(clearButton.imageWithRenderingMode(.AlwaysTemplate), forState: .Normal)
// This gives the error: "Cannot assign to property: 'clearButton' is immutable
clearButton.tintColor = UIColor.whiteColor()
// Sorry for the weird formatting, it glitches here in the editor.
leftView 似乎没有 image 属性。如何像 Objective-C 代码那样访问该属性? 另外,如果有更好的方法来实现我想要的,请告诉我。
【问题讨论】:
标签: swift uiimage uitextfield uisearchbar