searchBar 中的取消按钮 ios 8

Cancel button in searchBar ios 8

告诉我如何更改搜索栏中“取消”按钮上的文本?

图片:http://i.stack.imgur.com/8G1ZM.png

你可以在 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个解。

  1. 设置key/value

[self.searchController.searchBar setValue:@"취소" forKey:@"_cancelButtonText"];

这个解决方案很有效,但是你必须知道 _cancelButtonText 属性 不是 public 属性。(你在文档页面找不到这个 属性 .) 并且不确定这个解决方案能否通过苹果审核流程。所以,请使用解决方案 2。

  1. 使用委托。 您可以在 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];