1

基本的に私が達成しようとしているのは、スコープバーが消えないようにすることです。

環境:IOS 7、ストーリーボード、ビューコントローラー内「検索バーと検索ディスプレイコントローラー」と別のテーブルビューがあります(検索バーはテーブル内にありません)

View Controller.h の内部

@property (nonatomic, strong) IBOutlet UISearchBar *candySearchBar;

ビューコントローラーの内部.m

@synthesize candySearchBar;

私が試したこと:カスタム検索バークラス内

- (void) setShowsScopeBar:(BOOL) showsScopeBar
{
    if ([self showsScopeBar] != showsScopeBar) {
        [super invalidateIntrinsicContentSize];
    }
    [super setShowsScopeBar:showsScopeBar];

    [super setShowsScopeBar: YES]; // always show!

    NSLog(@"setShowsScopeBar searchbar");
    NSLog(@"%hhd", showsScopeBar);
}

searchBarDidEndEditing

ビューコントローラーでも同じですが、その後

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    [candySearchBar setShowsScopeBar:YES];
    [candySearchBar sizeToFit];
}

私の質問が明確であることを願っています。私はインターネット上に投稿された多くの解決策を試しました。それらのほとんどは setshowsscopebar について話していますが、うまくいかないようです。setshowscopebar のログの出力は 1 ですが、スコープバーはまだ表示されていません。

私はまだ自分がコードに慣れていないと考えています。障害はまだ初心者の間違いである可能性があります。

edit : ビュー コントローラーの別のコードです。

-(void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller{
    self.searchDisplayController.searchBar.showsCancelButton = YES;
    self.searchDisplayController.searchBar.showsScopeBar = YES;
    controller.searchBar.showsScopeBar = TRUE;
    controller.searchBar.frame = CGRectMake(0, 149, 768, 88);
    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:@"Cancel" forState:UIControlStateNormal];
        [cancelButton setEnabled:YES];
        controller.searchBar.showsScopeBar = YES;
        //candySearchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"Flags", @"Listeners", @"Stations", nil];
    }
    NSLog(@"%@",NSStringFromCGRect(controller.searchBar.frame));
    NSLog(@"%@",NSStringFromCGRect(controller.searchBar.bounds));
    NSLog(@"%hhd@",controller.searchBar.hidden);
}
4

4 に答える 4

0

同じ問題があります。おそらく、スコープバーの表示がデフォルトの動作であると想定されているため、iOS7 で変更されたものです。これは、次のチュートリアルの「オプションのスコープ バーを作成して結果をフィルター処理する」セクションで確認できます。

http://www.raywenderlich.com/16873/how-to-add-search-into-a-table-view

うまくいけば、誰かがこれに対する解決策を持っています。それ以外の場合は、回避策を探す必要があります。

于 2013-11-19T06:06:56.927 に答える
0

セットスコープバーNOの初期化

[self.searchBar setShowsScopeBar:NO];
[self.searchBar sizeToFit];

//default scope bar selection
self.searchBar.selectedScopeButtonIndex=3;

scopeBarチェックボックスの選択を解除/削除

ここに画像の説明を入力

于 2014-01-16T06:09:31.490 に答える