8

iOSのキャンセルボタンのタイトルを変更したい。私は以前にこれを使用しています:

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller{
  self.searchDisplayController.searchBar.showsCancelButton = YES;
  UIButton *cancelButton = nil;
  for (UIView *subView in self.searchDisplayController.searchBar.subviews) {
     if ([subView isKindOfClass:NSClassFromString(@"UIButton")]) {
         cancelButton = (UIButton*)subView;
     }
  }
  [cancelButton setTitle:@"Annuller" forState:UIControlStateNormal];
}

しかし、iOS7では動作しないようです。助言がありますか?

4

13 に答える 13

12

ボタンを再帰的に検索する必要があります。これは、フェイルセーフな方法である必要があります。

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self convertButtonTitle:@"Cancel" toTitle:@"Annuller" inView:self.searchBar];
}

- (void)convertButtonTitle:(NSString *)from toTitle:(NSString *)to inView:(UIView *)view
{
    if ([view isKindOfClass:[UIButton class]])
    {
        UIButton *button = (UIButton *)view;
        if ([[button titleForState:UIControlStateNormal] isEqualToString:from])
        {
            [button setTitle:to forState:UIControlStateNormal];
        }
    }

    for (UIView *subview in view.subviews)
    {
        [self convertButtonTitle:from toTitle:to inView:subview];
    }
}

これは iOS 7 でのみテストしましたが、iOS 6 でも動作するはずです。

于 2013-09-23T09:58:35.380 に答える
10

このコードを実行するだけです:-

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    /* when user start editing in serchbar this method will display cancel button and disable the autocorrection functionality */

    srcbar.showsCancelButton = YES;

    for (UIView *subView in searchBar.subviews) {
        if ([subView isKindOfClass:[UIButton class]]) {
           UIButton *cancelButton = (UIButton*)subView;

            [cancelButton setTitle:@"hi" forState:UIControlStateNormal];
        }
    }
    srcbar.autocorrectionType = UITextAutocorrectionTypeNo;

}

iOS7 ではテストしていませんが、iOS6 では問題なく動作しています。

出力は:-

ここに画像の説明を入力

于 2013-09-23T10:06:21.743 に答える
10

これがios6とios7の両方に対する私のソリューションです

#define IS_IOS7 (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1)
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
    self.searchDisplayController.searchBar.showsCancelButton = YES;

    UISearchBar *searchBar = self.searchDisplayController.searchBar;
    UIView *viewTop = IS_IOS7 ? searchBar.subviews[0] : searchBar;
    NSString *classString = IS_IOS7 ? @"UINavigationButton" : @"UIButton";

    for (UIView *subView in viewTop.subviews) {
        if ([subView isKindOfClass:NSClassFromString(classString)]) {
            UIButton *cancelButton = (UIButton*)subView;
            [cancelButton setTitle:@"your title" forState:UIControlStateNormal];
        }
    }
}
于 2013-12-25T02:49:02.693 に答える
8

iOS7 で動作させるには、検索バーのサブビューで検索する必要があります。

//iOS 7 hack
searchBar.showsCancelButton = YES;
UIView* view=searchBar.subviews[0];
for (UIView *subView in view.subviews) {
    if ([subView isKindOfClass:[UIButton class]]) {
        UIButton *cancelButton = (UIButton*)subView;

        [cancelButton setTitle:@"Anuluj" forState:UIControlStateNormal];
    }
}
于 2013-12-05T21:48:02.960 に答える
4

スイフト 3.0 の場合

これはうまくいっています。

func setSearchButtonText(text:String,searchBar:UISearchBar) {

    for subview in searchBar.subviews {
        for innerSubViews in subview.subviews {
            if let cancelButton = innerSubViews as? UIButton {
                cancelButton.setTitleColor(UIColor.white, for: .normal)
                cancelButton.setTitle(text, for: .normal)
            }
        }
    }

}

そして、メソッドを呼び出します

setSearchButtonText(text: "Done", searchBar: yourSearchBar)

ここに出力があります

ここに画像の説明を入力

于 2016-10-26T10:58:27.597 に答える
1

「キャンセル」テキストをロケールで同じに変更したいだけの場合、適切な方法はローカリゼーションを使用することです。方法は次のとおりです。

  1. プロジェクトをFinderで開き、en.lprojディレクトリを見つけます
  2. ロケールに名前を変更するか、複数の言語をサポートする必要がある場合は複製します
  3. Xcodeに含まれている可能性のあるファイル参照を削除します(赤く見えるはずです)
  4. 同じファイルをFinderから新しいディレクトリからXcodeにドラッグします
  5. (これが必要かどうかはわかりません)編集してInfo.plist次の行を追加します。

    • Localization native development region: お住まいの地域 (例: en)
    • Localizations: 例えばEnglish

注: シミュレーターでは機能しません。デバイスでテストしてください。

(出典: http://www.ibabbleon.com/iphone_app_localization.html )

于 2013-11-24T22:05:30.963 に答える
0

@Nitin Gohel そうですか?

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller{
  self.searchDisplayController.searchBar.showsCancelButton = YES;
  UIButton *cancelButton = nil;
  for (UIView *subView in self.searchDisplayController.searchBar.subviews) {
     if ([subView isKindOfClass:NSClassFromString(@"UIButton")]) {
         cancelButton = (UIButton*)subView;

         [cancelButton setTitle:@"Annuller" forState:UIControlStateNormal];
     }
 }

}
于 2013-09-23T09:56:45.417 に答える
0

iOS7 の場合、これは機能します。

-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller{
    self.searchDisplayController.searchBar.showsCancelButton = YES;
    UIButton *cancelButton;
    UIView *topView = self.searchDisplayController.searchBar.subviews[0];
    for (UIView *subView in topView.subviews) {
        if ([subView isKindOfClass:NSClassFromString(@"UINavigationButton")]) {
            cancelButton = (UIButton*)subView;
        }
    }
    if (cancelButton) {
      //Set the new title of the cancel button
        [cancelButton setTitle:@"YourTitle" forState:UIControlStateNormal];
    }
}
于 2014-07-10T00:43:54.613 に答える
0

検索を開始する前に、UISearchBarDelagate または UISearchDisplayControllerDelegate で次のことを行います。

[self.searchDisplayController.searchBar.subviews enumerateObjectsUsingBlock:^(UIButton *subview, NSUInteger idx, BOOL *stop) {
            if ([subview isKindOfClass:[UIButton class]]) {
                [subview setTitle:@"OK" forState:UIControlStateNormal];
                *stop = YES;
            }
        }];
于 2013-10-24T12:01:18.153 に答える
0

上記の@Salihのソリューションを参照してください。私はこのコードを使用し、完璧に動作しました! アプリの起動時に AppDelegate.m のメソッド setupAppearance を呼び出すだけです。

- (void)setupAppearance
{
   id appearance = nil;

   if (IOS9_OR_LATER) {
       appearance = [UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]];
   } else {
       appearance = [UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil];
   }

   [appearance setTitle:@"CANCEL"];
}
于 2016-04-22T02:33:42.713 に答える