searchBar 中的取消按钮 ios 8
Cancel button in searchBar ios 8
告诉我如何更改搜索栏中“取消”按钮上的文本?
你可以在 UISearchBar 的委托方法中做到这一点
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
[theSearchBar setShowsCancelButton:YES animated:NO];
for (UIView *subView in theSearchBar.subviews){
if([subView isKindOfClass:[UIButton class]]){
[(UIButton*)subViewsetTitle:@"Button Title"forState:UIControlStateNormal];
}
}
}
更新
经过漫长的寻找我在 swift
工作的唯一途径
是设置一个自定义的UIBarButtonItem,但是你需要在导航中显示搜索栏
在 ViewDidLoad()
self.searchDisplayController?.displaysSearchBarInNavigationBar = true
在委托方法中
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
var barButton = UIBarButtonItem(title: "Button Title", style: UIBarButtonItemStyle.Done, target: self, action: "here")
self.searchDisplayController?.navigationItem.rightBarButtonItem = barButton
}
希望对你有用
«另一个更新
正如您在评论中所说,您需要本地化您的应用程序,在您的情况下,您只需要本地化故事板
首先导航到您的项目设置,然后导航到信息,在本地化下单击 + 按钮并添加您自己的语言,然后仅选中 StoryBoard
现在您已经本地化了您的应用程序,但您可能看不到更改,直到您删除该应用程序并重新安装它,或者如果设备语言设置为英语,您将需要编写 2 行代码进行更改这里的语言是手动的
var str:NSString = "ar" // ar stands for arabic you put here you own language small character
var myArray:NSArray = [str]
NSUserDefaults.standardUserDefaults().setObject(myArray, forKey: "AppleLanguages")
您的按钮将如下所示
如果您想了解有关本地化的更多信息,请参阅此 Internationalization Tutorial for iOS [2014 Edition]
如果你还需要帮助直到我:)
有2个解。
- 设置key/value
[self.searchController.searchBar setValue:@"취소" forKey:@"_cancelButtonText"];
这个解决方案很有效,但是你必须知道 _cancelButtonText 属性 不是 public 属性。(你在文档页面找不到这个 属性 .)
并且不确定这个解决方案能否通过苹果审核流程。所以,请使用解决方案 2。
- 使用委托。
您可以在 willPresentSearchController 方法中更改取消按钮标题 (iOS8)。
(假设searchBar在tableView headerView中)
- (void)willPresentSearchController:(UISearchController *)searchController{
// You have to set YES showsCancelButton.
// If not, you can not change your button title when this method called
// first time.
self.searchController.searchBar.showsCancelButton = YES;
UIView* view=self.searchController.searchBar.subviews[0];
for (UIView *subView in view.subviews) {
if ([subView isKindOfClass:[UIButton class]]) {
// solution 1
UIButton *cancelButton = (UIButton*)subView;
[cancelButton setTitle:NSLocalizedString(@"취소", nil) forState:UIControlStateNormal];
}
}
}
此外,您可以通过 Xcode 中的视图调试工具获取有关搜索栏的信息。在 willPresentSearchController 方法中设置断点。
祝你好运。
实际上,取消按钮不是搜索栏中的顶视图。你应该递归地搜索它。
-(UIButton*)findButtonInView:(UIView*)v{
for (UIView *subView in v.subviews){
if([subView isKindOfClass:[UIButton class]]){
return (UIButton*)subView;
}else if([subView isKindOfClass:[UIView class]]){
UIButton* btn = [self findButtonInView:subView];
if(btn){
return btn;
}
}
}
return nil;
}
//...
UIButton* searchButton = [self findButtonInView:self.searchBar];
告诉我如何更改搜索栏中“取消”按钮上的文本?
你可以在 UISearchBar 的委托方法中做到这一点
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
[theSearchBar setShowsCancelButton:YES animated:NO];
for (UIView *subView in theSearchBar.subviews){
if([subView isKindOfClass:[UIButton class]]){
[(UIButton*)subViewsetTitle:@"Button Title"forState:UIControlStateNormal];
}
}
}
更新
经过漫长的寻找我在 swift
工作的唯一途径是设置一个自定义的UIBarButtonItem,但是你需要在导航中显示搜索栏
在 ViewDidLoad()
self.searchDisplayController?.displaysSearchBarInNavigationBar = true
在委托方法中
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
var barButton = UIBarButtonItem(title: "Button Title", style: UIBarButtonItemStyle.Done, target: self, action: "here")
self.searchDisplayController?.navigationItem.rightBarButtonItem = barButton
}
希望对你有用
«另一个更新
正如您在评论中所说,您需要本地化您的应用程序,在您的情况下,您只需要本地化故事板
首先导航到您的项目设置,然后导航到信息,在本地化下单击 + 按钮并添加您自己的语言,然后仅选中 StoryBoard
现在您已经本地化了您的应用程序,但您可能看不到更改,直到您删除该应用程序并重新安装它,或者如果设备语言设置为英语,您将需要编写 2 行代码进行更改这里的语言是手动的
var str:NSString = "ar" // ar stands for arabic you put here you own language small character
var myArray:NSArray = [str]
NSUserDefaults.standardUserDefaults().setObject(myArray, forKey: "AppleLanguages")
您的按钮将如下所示
如果您想了解有关本地化的更多信息,请参阅此 Internationalization Tutorial for iOS [2014 Edition]
如果你还需要帮助直到我:)
有2个解。
- 设置key/value
[self.searchController.searchBar setValue:@"취소" forKey:@"_cancelButtonText"];
这个解决方案很有效,但是你必须知道 _cancelButtonText 属性 不是 public 属性。(你在文档页面找不到这个 属性 .) 并且不确定这个解决方案能否通过苹果审核流程。所以,请使用解决方案 2。
- 使用委托。 您可以在 willPresentSearchController 方法中更改取消按钮标题 (iOS8)。
(假设searchBar在tableView headerView中)
- (void)willPresentSearchController:(UISearchController *)searchController{
// You have to set YES showsCancelButton.
// If not, you can not change your button title when this method called
// first time.
self.searchController.searchBar.showsCancelButton = YES;
UIView* view=self.searchController.searchBar.subviews[0];
for (UIView *subView in view.subviews) {
if ([subView isKindOfClass:[UIButton class]]) {
// solution 1
UIButton *cancelButton = (UIButton*)subView;
[cancelButton setTitle:NSLocalizedString(@"취소", nil) forState:UIControlStateNormal];
}
}
}
此外,您可以通过 Xcode 中的视图调试工具获取有关搜索栏的信息。在 willPresentSearchController 方法中设置断点。 祝你好运。
实际上,取消按钮不是搜索栏中的顶视图。你应该递归地搜索它。
-(UIButton*)findButtonInView:(UIView*)v{
for (UIView *subView in v.subviews){
if([subView isKindOfClass:[UIButton class]]){
return (UIButton*)subView;
}else if([subView isKindOfClass:[UIView class]]){
UIButton* btn = [self findButtonInView:subView];
if(btn){
return btn;
}
}
}
return nil;
}
//...
UIButton* searchButton = [self findButtonInView:self.searchBar];