我正在尝试创建自定义搜索栏,以便我可以
然而,即使在继承UISearchBar
之后,我也无法实现我想要的并面临以下问题:
调试时,我可以在视图和视图中看到UISearchBar。在其中的searchField,但在self.subViews
上迭代并检查元素是否为UITextField
时,我什么也得不到。重新检查,我总是得到一个subView,其内存地址与调试模式下的搜索栏不同
var customSearchBar:UISearchBar?
var searchField:UITextField?
var button:UIButton?
override func layoutSubviews() {
for subView in self.subviews {
if (subView.isKindOfClass(UITextField)) {
searchField = (subView as! UITextField)
break
}
}
if ((searchField) != nil) {
searchField?.textColor = UIColor.redColor() //Testing if code works?
}
super.layoutSubviews()
}
我不想使用无证件的方式,几乎尝试了我在这里找到的所有方法,但没有取得任何成功
请帮助我。我正在使用Xcode 7和iOS 8
答案 0 :(得分:4)
1.您可以尝试以下代码:
let searchBar = UISearchBar(frame: CGRect(x: 0, y: 0, width: 300, height: 40))
searchBar.backgroundImage = UIImage()//Without this you can't change background color
searchBar.backgroundColor = UIColor.greenColor()
searchBar.showsCancelButton = true
searchBar.returnKeyType = .Done
searchBar.placeholder = "Test text"
var txtSearchField = searchBar.valueForKey("_searchField")
txtSearchField?.layer.cornerRadius = 15
txtSearchField?.layer.borderWidth = 1.5
txtSearchField?.layer.borderColor = UIColor.orangeColor().CGColor
let image = txtSearchField?.subviews?[1]
image?.frame = CGRect(x: 0, y: 7.5, width: 13, height: 13)
let lbl = txtSearchField?.subviews.last as! UILabel
lbl.textColor = UIColor.whiteColor()
lbl.backgroundColor = UIColor.blueColor()
lbl.frame = CGRect(x: 13, y: 1, width: 127.5, height: 25)
答案 1 :(得分:2)
要了解如何构建UISearchBar的逻辑,您可以查看其所有私有apis here的UISearchBar.h文件。如您所见,它有UISearchBarTextField作为子视图。
去年在iOS 7项目中,我使用此代码访问UISearchBar的UITextField:
UITextField *searchBarTextField;
for (UIView *subview in self.searchBar.subviews) {
for (UIView *subsubview in subView.subviews){
if ([subsubview isKindOfClass:[UITextField class]]) {
searchBarTextField = (UITextField *)subsubview;
break;
}
}
}
但是,我不建议使用此逻辑,就像Apple更改私有API方法一样,UI和布局可能会被破坏。您可以尝试使用循环方法循环抛出UISearchBar子视图的所有子视图并查找所需的文本字段,但同样,它可能会随时被删除。
将来,如果您对如何访问Apple构建UI上的任何子视图有任何疑问 - 可以通过在调试面板上按此按钮调试视图层次结构:
如果你想让它自定义 - 为什么不创建自己的? UIView + UITextField + UIButton + some logic = UISearchBar。