2013-10-03 6 views
7

xCodeプロジェクトには、ユーザーが表示アイテムのリストを絞り込むための「検索バーと検索ディスプレイコントローラ」を持つテーブルビューが含まれています。一般に、http://www.raywenderlich.com/16873/how-to-add-search-into-a-table-viewで提供されるガイダンスに従った。私は最近、iOS 7のサポートで最新のxCode(バージョン5.0(5A1413))をダウンロードし、問題のアプリをさまざまなターゲットでテストしています。UISearchBarのキャンセルボタンとクリアボタンがiOS 7で動作しない

iOS 6ターゲット(エミュレータまたはリアルデバイス)でこのアプリケーションを実行すると、キャンセルボタンを押すと検索バーが削除され、クリアボタン(小さな灰色のx)を押すとすべての検索条件がクリアされます既にユーザによって入力されている。しかし、プロジェクトがiOS 7ターゲットで実行されているときは、クリアボタンとキャンセルボタンの両方が機能しません。

searchBarCancelButtonClicked方法は、本プロジェクトで実装されており、ターゲットはiOSの7を実行しているとき、私は

- (void)searchBarCancelButtonClicked:(UISearchBar *)SearchBar 
{ 
    NSLog(@"searchBarCancelButtonClicked called"); 

    self.searchBar.text = nil; 

    … 

    // Hide Search bar when cancelled 
    [self hideSeachBar]; 

    [self.searchBar resignFirstResponder]; 

    … 
    } 

私のテーブルビューコントローラはUISearchDisplayDelegateとUISearchBarDelegateなるように設定され、それが呼び出されないことを確認しました。これはまだsearchBarとして機能しているようです:textDidChange:iOS 6または7のいずれかのターゲットで呼び出されます。

@interface ItemViewController() <UISearchDisplayDelegate, UISearchBarDelegate> 
… 
@end 

私はこのまたはiOS7をサポートするために行われる必要がある任意の再符号化に言及している(https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/Bars.html#//apple_ref/doc/uid/TP40013174-CH8-SW1など)の任意のiOS 7変化材料に関連する他の記事を見ることができません。

これについてのご意見はありますか?ありがとう

+0

回答を確認する機会はありませんでしたが、同じ問題については、https://devforums.apple.com/message/880210#880210とhttps://devforums.appleで気づきました。 com/message/876407#876407 – Mike

+0

iOS7のための私のコードの仕事:http://stackoverflow.com/a/22287788/771689 –

答えて

3

私は同じ問題を抱えています、私は次のコードで試しました。これをお試し下さい。

-(void)searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller 
{ 
    controller.active = YES; 

    [self.view addSubview:controller.searchBar]; 
    [self.view bringSubviewToFront:controller.searchBar]; 
} 

- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView { 

    tableView.frame = self.archiveListTblView.frame; 
} 

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller 
{ 
    controller.active=NO; 

    [self.view addSubview:controller.searchBar]; 
} 
+0

あなたのself.archiveListTblViewがどのように設定され、使用されているのか不思議です。 – Mike

+0

こんにちはMike、私の見解では、iOS7は自動的にその誕生ウィンドウのレイアウトを作成します。それが私たちが直面した問題の理由です。もう一つ、私は "self.archiveListTblView.frame"の代わりに "self.view.frame"を試しました。このコードも私にとってはうまく機能します。だから問題は、テーブルビューのフレームを設定しなかったことです。 :-P – Prabakaran

0

私はインターネット上でグーグルで解決策を見つけることができませんでした。だから私はUItableviewの動作を変更しました。

の代わりに[searchBar becomeFirstResponder];私はテーブルビューを下にスクロールします。私のviewDidLoadで

- (IBAction)goToSearch:(id)sender { 

scroll down to show the table. 
// CGRect newBounds = self.TableView.bounds; 
// newBounds.origin.y =0; 
//  
// self.TableView.bounds = newBounds; 
//[searchBar becomeFirstResponder]; 

    CGPoint contentOffset=self.TableView.contentOffset; 
    contentOffset.y=0; 
    [self.TableView setContentOffset:contentOffset animated:YES]; 


} 

//  CGRect newBounds = self.TableView.bounds; 
//  newBounds.origin.y = newBounds.origin.y + searchBar.bounds.size.height; 
     // self.TableView.bounds = newBounds; 

     CGPoint contentOffset=self.TableView.contentOffset; 
     contentOffset.y=self.TableView.bounds.origin.y + searchBar.bounds.size.height; 
     self.TableView.contentOffset=contentOffset; 

のiOS 7に、いくつかの理由で見つかった場合は、変更テーブルビューの境界には、検索バーが消えさせます。 希望に役立ちます。

1

ボタンナビゲーションのボタン検索をタッチすると、[キャンセル]ボタンと[クリア]ボタンが機能しません。検索バーをタップして検索すると、それは正常に動作します =>つまり、検索を開始する前に検索バーが画面に表示されていないと、そのボタンも無効に見えます。

解決策が見つかりましたが、完全には完璧ではありません。 検索バーを最初のレスポンスにする前に、テーブルビューを上にスクロールする必要があります。このコードを試してください。

-(IBAction)goToSearch:(id)sender { 
    // Make search bar visible on screen before make it response 
    [_tableView setContentOffset:CGPointMake(0, 0) animated:NO]; 

    // Make search bar active 
    [candySearchBar becomeFirstResponder]; 
} 

唯一の問題は、あなたがこれを行う場合は、あなたのテーブルビューを使用すると、検索を中止する場合を意味しており、トップにスクロールしますです、あなたが前に現在のセルインデックスを失っ起こります。

1

この問題は、ナビゲーションバーの半透明プロパティの新しい動作に起因するようです。

iOS 7のナビゲーションバーはデフォルトで半透明です。ボタンを押した後に表示すると、検索バーと重なっているように見えます。リストビューの一番上にスクロールして検索バーを使用すると、正しく動作するはずです。

は、あなたのコントローラに設定してください:

float osVersion = [[[UIDevice currentDevice] systemVersion] floatValue]; 
if (osVersion >= 7.0) 
{ 
    self.navigationController.navigationBar.translucent = NO; 
} 

これは、問題を迅速に解決する必要があります。

しかし、私はより良い修正のために、iOS 7 transition guideが半透明のナビゲーションバーをどのように扱うか説明しているはずです。

希望に役立ちます。

1

私もこの問題を抱えていました。不思議なことに、UISearchBarDelegateの他のデリゲートメソッドが呼び出されています。回避策は次のようになります。

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ 
    if ([searchText length] == 0) { 
     NSLog("No Text"); 
    } 
} 

それは私の場合は私のため

0

を働いていた、私は画面の上部に検索バーを再配置していた、と検索バーの上に重なっている目に見えないビューがありました。

キャンセルボタンは実際には触れられませんでした。

[searchBarTextDidBeginEditing]メソッドが以下のように呼び出されたときに、私はseachbarを前面に持ってきました。

-(void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{ 
    lc_SearchBarYPos.constant = 20.0f; //this is code to reposition the searchbar 
    [self.view bringSubviewToFront:searchBar]; 
} 

希望します。