上部に検索バーがあるテーブルビューがあります。検索をクリックすると、ファーストレスポンダーに呼び出され、キーボードが表示されます。検索バーにはキャンセルボタンがありますが、テーブルが空の場合、ユーザーが空のテーブル行の任意の場所をタップして、検索バーとキーボードをファーストレスポンダーとして辞任できるようにしたいと思います。どうすればよいですか?
2 に答える
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です。
試してはいけません......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;
これがお役に立てば幸いです......。