1

上部に検索バーがあるテーブルビューがあります。検索をクリックすると、ファーストレスポンダーに呼び出され、キーボードが表示されます。検索バーにはキャンセルボタンがありますが、テーブルが空の場合、ユーザーが空のテーブル行の任意の場所をタップして、検索バーとキーボードをファーストレスポンダーとして辞任できるようにしたいと思います。どうすればよいですか?

4

2 に答える 2

4

touchesEndedメソッドをオーバーライドする独自のUITableViewクラスを作成する必要があります。次に、ビューコントローラであるデリゲートにコールバックし、UISearchBarにファーストレスポンダーを辞任するように指示できます。

UITableView派生クラスは次のようになります。

#import <UIKit/UIKit.h>

@interface FRTableView : UITableView {
}

@end

// ------------------------------

#import "FRTableView.h"

@implementation FRTableView

- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        // Initialization code
    }
    return self;
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesEnded:touches withEvent:event];
    NSLog(@"Touches ended");

    // Bubble back up to your view controller which should be this
    // table view's delegate.
    if ([self delegate] && [[self delegate] respondsToSelector:@selector(touchEnded)])
        [[self delegate] performSelector:@selector(touchEnded)];
}

@end

通常のUITableViewクラスの代わりにカスタムクラスを使用するようにInterfaceBuilderでテーブルビューを設定してください。次に、View Controllerで、touchEndedと呼ばれるセレクターを次のように実装します。

- (void)touchEnded;
{
    NSLog(@"Back in root view controller.");
    [searchBar resignFirstResponder];
}

ここで、searchBarは、InterfaceBuilderのUISearchBarに接続されたIBOutletです。

于 2009-11-11T06:15:39.230 に答える
0

試してはいけません......UISearchDisplayController

これらをur.hファイルで定義するだけです

IBOutlet UISearchBar * mySearchBar; UISearchDisplayController * mySearchDisplayController; IBOutlet UITableView * myTableView;

.hでUISearchBarDelegateを処理します

今.mファイルにこれらのコードを書くだけです

mySearchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:mySearchBar contentsController:self]; mySearchDisplayController.searchResultsDelegate = self; mySearchDisplayController.searchResultsDataSource = self; mySearchDisplayController.delegate = self;

これがお役に立てば幸いです......。

于 2010-09-27T15:12:11.740 に答える