我有一個UISearchBar,如下所示。如何更改取消按鈕的文字顏色?如何更改UISearchbar取消按鈕的文本顏色
回答
前一個問題是這個問題,所以我認爲詢問的人已經找到了解決方案。但以防萬一其他碰巧遇到同樣的問題。這是我的解決方案。
我有一個UISearchBar帶有一個取消按鈕,只有當UISearchBar的文本框被點擊時纔會出現。因此,在UISearchBar的子類中覆蓋 - (void)layoutSubviews的解決方案對我來說不是一種選擇。無論如何,我做了一個UISearchBar(CustomSearchBar)的子類與公共方法設置取消按鈕的字體和textColor。當我創建UISearchBar時,我確保搜索欄的文本字段委託設置爲self,並且創建搜索欄的類實現UITextFieldDelegate協議。當用戶點擊搜索欄的文本字段時,會通知其委託並調用CustomSearchBar的方法。我之所以這樣做,是因爲這是取消按鈕出現的時刻,因此我知道它在視圖層次結構中,我可以進行自定義。
下面的代碼:
對於MyRootViewController在MyRootViewController創建的UISearchBar
CustomSearchBar *searchBar = [[CustomSearchBar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 40)];
[searchBar setBarStyle:UIBarStyleDefault];
[searchBar setTintColor:[UIColor whiteColor]];
for (UIView *view in [searchBar subviews])
{
if ([view isKindOfClass:[UITextField class]])
{
UITextField *searchTextField = (UITextField *)view;
[searchTextField setDelegate:self];
}
}
self.searchBar = searchBar;
[searchBar release];
UITextFieldDelegate(確保它實現了UITextFieldDelegate協議)
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
[self.searchBar setCloseButtonFont:[UIFont fontWithName:@"American Typewriter" size:14] textColor:[UIColor grayColor]];
}
這是公衆方法在UISearchBar的子類中
- (void)setCloseButtonFont:(UIFont *)font textColor:(UIColor *)textColor
{
UIButton *cancelButton = nil;
for(UIView *subView in self.subviews)
{
if([subView isKindOfClass:[UIButton class]])
{
cancelButton = (UIButton*)subView;
}
}
if (cancelButton)
{
/* For some strange reason, this code changes the font but not the text color. I assume some other internal customizations make this not possible:
UILabel *titleLabel = [cancelButton titleLabel];
[titleLabel setFont:font];
[titleLabel setTextColor:[UIColor redColor]];*/
// Therefore I had to create view with a label on top:
UIView *overlay = [[UIView alloc] initWithFrame:CGRectMake(2, 2, kCancelButtonWidth, kCancelButtonLabelHeight)];
[overlay setBackgroundColor:[UIColor whiteColor]];
[overlay setUserInteractionEnabled:NO]; // This is important for the cancel button to work
[cancelButton addSubview:overlay];
UILabel *newLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 2, kCancelButtonWidth, kCancelButtonLabelHeight)];
[newLabel setFont:font];
[newLabel setTextColor:textColor];
// Text "Cancel" should be localized for other languages
[newLabel setText:@"Cancel"];
[newLabel setTextAlignment:UITextAlignmentCenter];
// This is important for the cancel button to work
[newLabel setUserInteractionEnabled:NO];
[overlay addSubview:newLabel];
[newLabel release];
[overlay release];
}
}
而不是做所有這些花哨的東西只是執行SearchBarTextDidBeginEditing這樣
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
// only show the status bar’s cancel button while in edit mode sbar (UISearchBar)
searchBar.showsCancelButton = YES;
searchBar.autocorrectionType = UITextAutocorrectionTypeNo;
UIColor *desiredColor = [UIColor colorWithRed:212.0/255.0 green:237.0/255.0 blue:187.0/255.0 alpha:1.0];
for (UIView *subView in searchBar.subviews){
if([subView isKindOfClass:[UIButton class]]){
NSLog(@"this is button type");
[(UIButton *)subView setTintColor:desiredColor];
[(UIButton *)subView setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
}
}
這工作就像一個魅力! – Giovanni
Gyanerdra的回答運作良好。但對於iOS7,我需要進行以下更改才能在我的應用程序中工作。
NSArray *childViews;
if ((APP).isIOS7) {
childViews = [[searchBar.subviews objectAtIndex:0] subviews];
} else {
childViews =searchBar.subviews;
}
for (UIView *subView in childViews) {
if([subView isKindOfClass:[UIButton class]]){
[(UIButton *)subView setTintColor:desiredColor];
[(UIButton *)subView setTitleColor:desiredColor forState:UIControlStateNormal];
}
}
看來,對於iOS7搜索欄被包含在父視圖中。 希望這可以幫助別人。 b
您可以利用iOS運行時屬性_cancelButton
來實現此目的。
UIButton *cancelButton = [searchBar valueForKey:@"_cancelButton"];
[cancelButton setTitleColor:[UIColor yourColor] forState:UIControlStateNormal];
Unable to change UISearchBar cancel button title color after changing it's text.
獲取cancelButton = nil,直到您未啓用searchBar.showsCancelButton = YES – kb920
- 1. 如何更改UISearchBar的取消按鈕的文本顏色?
- 2. 如何更改iOS7中UISearchBar的取消按鈕色調顏色
- 3. 如何更改Swift 3中UISearchBar「取消」按鈕的顏色?
- 4. 如何更改UISearchBar中取消按鈕的顏色
- 5. 更改文字後,無法更改UISearchBar取消按鈕標題顏色。
- 6. Swift:修改UISearchBar取消按鈕字體的文本顏色和樣式
- 7. 使用Monotouch更改UISearchBar上「取消」按鈕的文本?
- 8. 更改取消按鈕BackgroundColor和UISearchBar在iOS7中的文本
- 9. 如何設置UISearchBar取消按鈕突出顯示顏色
- 10. UISearchbar add navigationController?.navigationBar,如何更改「取消」顏色
- 11. 更改WinForm按鈕文本顏色?
- 12. 更改切換按鈕文本顏色
- 13. 單選按鈕更改文本顏色
- 14. 如何更改UIAction表取消按鈕背景顏色
- 15. 如何更改按鈕的tabcontrol顏色?
- 16. 如何更改gridView的按鈕顏色
- 17. 如何更改按鈕的顏色?
- 18. 如何更改按鈕的顏色
- 19. 如何更改UIActionsheet按鈕的顏色?
- 20. 更改顏色的按鈕
- 21. 如何更改按鈕上的textView文本顏色點擊
- 22. 如何使用java中的按鈕更改文本顏色
- 23. 如何更改MFMailComposeViewController文本和按鈕圖像的顏色?
- 24. 如何更改IE中禁用按鈕的文本顏色?
- 25. 如何更改UINavigationBar按鈕項上的文本顏色
- 26. 如何更改按鈕的文本顏色?
- 27. Dart:如何更改按鈕文本的顏色
- 28. 如何在輸入文本框時更改按鈕的顏色
- 29. 更改MFMailComposeViewController上的發送/取消按鈕上文本的顏色
- 30. UISearchbar上的取消按鈕
這真棒。非常感謝。我用另一種方法,我不是很滿意。但有了這個,我現在可以重新訪問這個問題。謝謝! – Zhen
我很高興它幫助你。 – strave