[英]Change frame of cancel button in UISearchBar
我有以下代碼來更改應用程序中 UISearchBar 的外觀,也可以在下圖中看到:
for(int i = 0; i < [[searchBar subviews] count]; i++){
UIView *subView = [[searchBar subviews] objectAtIndex:i];
if([[NSString stringWithFormat:@"%@", [subView class]] isEqualToString:@"UINavigationButton"]){
UIButton *cancelButton = (UIButton *)subView;
CGRect buttonFrame = cancelButton.frame;
buttonFrame.size.height = 52;
[cancelButton setFrame:buttonFrame];
[cancelButton setTitle:@"Cancel" forState:UIControlStateNormal];
[cancelButton setBackgroundImage:[UIImage imageNamed:@"cancel.png"] forState:UIControlStateNormal];
[cancelButton setBackgroundImage:[UIImage imageNamed:@"cancel_pressed.png"] forState:UIControlStateHighlighted];
}
}
如您所見,我正在嘗試更改 UISearchBar 中包含的按鈕的高度,但沒有成功。 我確實得到了對按鈕的引用,因為我可以更改文本,並且背景圖像更改而不是框架的高度。 我希望按鈕的高度與 52px 的搜索框相同。
編輯:
我找到了一個非常笨拙的解決方案,但是將 UIButton 添加為取消按鈕的子視圖並不是很優雅。 它可以完成這項工作,但正如我所說,它不是很好。
其實你可以使用下面的方法來訪問取消按鈕:
UIBarButtonItem *cancelButton = [UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil];
所以我用這個覆蓋了-layoutSubViews
,但是我有兩個問題
我討厭遍歷視圖以找到匹配的視圖,這會使動畫有點混亂
- (UIButton *)cancelButton {
for (UIView *v in self.subviews) {
if ([v isKindOfClass:[UIButton class]]) {
NSString *caption = [[((UIButton *)v) titleLabel] text];
if ([caption isEqualToString:@"Cancel"] )
return (UIButton *)v;
}
}
return nil;
}
- (BOOL)cancelButtonIsShowing {
return ([self cancelButton] != nil);
}
- (void)layoutSubviews {
[super layoutSubviews];
if ([self cancelButtonIsShowing]) {
UIButton *cancelButton = [self cancelButton];
UIImage *i = [UIImage imageNamed:@"Cancel_BTN"];
CGRect f = CGRectMake(267, 5, i.size.width, i.size.height);
cancelButton.frame = f;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.