Iphone 更改UISearchBar中取消按钮的框架
我有以下代码来更改应用程序中UISearchBar的外观,如下图所示:Iphone 更改UISearchBar中取消按钮的框架,iphone,frame,uisearchbar,Iphone,Frame,Uisearchbar,我有以下代码来更改应用程序中UISearchBar的外观,如下图所示: for(int i = 0; i < [[searchBar subviews] count]; i++){ UIView *subView = [[searchBar subviews] objectAtIndex:i]; if([[NSString stringWithFormat:@"%@", [subView class]] isEqualToString:@"UINavigationButto
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];
}
}
for(int i=0;i<[[searchBar子视图]计数];i++){
UIView*子视图=[[searchBar子视图]对象索引:i];
如果([[NSString stringWithFormat:@“%@,[subView类]]IseQualtString:@“UINavigationButton”]){
UIButton*cancelButton=(UIButton*)子视图;
CGRect buttonFrame=cancelButton.frame;
buttonFrame.size.height=52;
[取消按钮设置框:按钮框];
[取消按钮设置标题:@“取消”状态:uicontrol状态正常];
[cancelButton setBackgroundImage:[UIImage ImageName:@“cancel.png”]用于状态:UIControlStateNormal];
[cancelButton setBackgroundImage:[UIImage ImageName:@“cancel_pressed.png”]用于状态:UIControlStateHighlighted];
}
}
如您所见,我试图更改UISearchBar中包含的按钮的高度,但运气不佳。我确实得到了对按钮的引用,因为我可以更改文本和背景图像,而不是更改帧的高度。我只希望按钮的高度与52px处的搜索框相同
编辑:
我已经找到了一个非常粗糙的解决方案,但是添加一个UIButton作为Cancel按钮的子视图并不十分优雅。它确实起作用,但正如我所说,它不是很好 所以我用这个覆盖了
-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;
}
}
实际上,您可以使用下面的方法访问“取消”按钮:
UIBarButtonItem *cancelButton = [UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil];
buttontype是自定义的吗?不是,它是UISearchBar子视图中的标准UIButton。仅为每个ControlState设置背景。可能子类uisearchbar和override-addSubView方法并在那里设置帧?在
-addSubView
中更改帧没有效果。我猜苹果的-layoutSubViews
中有一个硬编码按钮大小的东西。您可以覆盖-layoutSubViews
,但这会导致一点脏动画有一种更复杂的方法来解决动画中的问题。如果你需要,请告诉我