1

我试图将 UIsearchBar 添加到我的导航控制器。我也希望使用 UISearchBar 的取消按钮。

UISearchBar* searchBar = [[UISearchBar alloc] init];
searchBar.frame = CGRectMake(0, 0, 300, searchBar.frame.size.height);
searchBar.translucent = NO;
searchBar.barStyle = UIBarStyleBlack;
searchBar.delegate = self;
UIView* myView = [[UIView alloc] initWithFrame:searchBar.frame];
[myView addSubview:searchBar];
UIBarButtonItem* sbItem = [[UIBarButtonItem alloc] initWithCustomView:myView];    
[self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects:chart,sbItem,nil]];

searchBar 处于非活动状态的麻烦。它出现在导航控制器中。但是当我点击它时,它不会以任何方式响应。如果我显示取消按钮,它会出现但也无法点击。

如果我不将 UIsearchBar 包装在 UIView 上,它可以正常工作,除非它不想向我显示取消按钮。

UPD 如果我打电话

[searchBar becomeFirstResponder]

它进入编辑模式并向我显示一个取消按钮和键盘,但看起来像其中 searchBar 包裹的视图更改了它的框架参数并从其原始外观向下 10 像素。并将其背景从 trnsparent 更改为 blackopaque

看起来像是某种巫毒教……这么简单的动作要花这么多时间……

4

1 回答 1

2

我认为您在搜索栏框架上弄错了,您将搜索栏高度作为 searchBar.frame.size.height,但当时没有高度,只需将其更改为:

UISearchBar* searchBar = [[UISearchBar alloc] init];
searchBar.frame = CGRectMake(0, 0, 300, 40);
searchBar.translucent = NO;
searchBar.barStyle = UIBarStyleBlack;
searchBar.delegate = self;
UIView* myView = [[UIView alloc] initWithFrame:searchBar.frame];
[myView addSubview:searchBar];
UIBarButtonItem* sbItem = [[UIBarButtonItem alloc] initWithCustomView:myView];    
[self.navigationItem setRightBarButtonItems:[NSArray  arrayWithObjects:chart,sbItem,nil]];

对不起,我不知道这里的图表是什么,希望它是你要找的。

于 2012-11-03T12:06:13.383 回答