UITableViewでテーブルビューを作成して、要素を選択で次画面に遷移、値を渡すプログラムを作っています。
さらに追加して検索機能を付けましたが、検索結果に出てくるセルをタップしても次の画面に遷移されません。
問題を解決すべく検索をして、didSelectRowAtIndexPathに遷移の記述をすれば良いとありましたが、どうやら私のプログラムではそのメソッド自体が呼ばれてないようです。
ヘッダファイルは以下です。
lang
1#import <UIKit/UIKit.h> 2 3@interface RoomTableViewController : UIViewController 4 5@property (weak, nonatomic) IBOutlet UITableView *roomtable; 6@property (weak, nonatomic) IBOutlet UISearchBar *searchbar; 7@property (nonatomic, strong) NSArray *dataSource; 8@property (nonatomic) NSArray *searchlist; 9 10@end
また、mファイルは以下です。Appdelegateの使い方がいまいち分からず配列を何度も宣言している駄文ですが見ていただけたら嬉しいです。
lang
1 2#import "AppDelegate.h" 3#import "RoomTableViewController.h" 4#import "RoomDetailViewController.h" 5 6@interface RoomTableViewController () <UISearchBarDelegate, UISearchDisplayDelegate> 7 8@end 9 10@implementation RoomTableViewController 11 12- (void)viewDidLoad { 13 [super viewDidLoad]; 14 _searchbar.delegate =self; 15 16 NSArray *roomlist = 17@[@"921",@"922",@"923",@"924",@"925",@"931",@"932",@"933",@"934",@"935",@"936",@"937",@"938",@"939",@"941",@"942",@"943",@"944",@"945",@"946",@"947",@"948",@"949",@"951",@"952",@"953",@"954",@"955",@"956",@"957",@"958",@"959"]; 18 19 self.searchlist = roomlist; 20} 21 22- (void)didReceiveMemoryWarning { 23 [super didReceiveMemoryWarning]; 24 25} 26#pragma mark - Table view data source 27 28- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 29 30 return 1; 31} 32 33- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 34 35 NSInteger datacount; 36 if(tableView == self.searchDisplayController.searchResultsTableView) 37 { 38 datacount = self.dataSource.count; 39 return datacount; 40 } 41 42 else 43 { 44 return 32; 45 } 46} 47 48- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 49 50 NSString *cellIdentifier = @"Cell"; 51 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 52 if (cell == nil) { 53 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 54 } 55 56 cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 57 58 NSArray *roomlist = 59@[@"921",@"922",@"923",@"924",@"925",@"931",@"932",@"933",@"934",@"935",@"936",@"937",@"938",@"939",@"941",@"942",@"943",@"944",@"945",@"946",@"947",@"948",@"949",@"951",@"952",@"953",@"954",@"955",@"956",@"957",@"958",@"959"]; 60 61 if(tableView == self.searchDisplayController.searchResultsTableView) 62 { 63 cell.textLabel.text = self.dataSource[indexPath.row]; 64 } 65 else 66 { 67 cell.textLabel.text = [roomlist objectAtIndex:indexPath.row]; 68 } 69 return cell; 70} 71 72-(void)tableview:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexpath 73{ 74 NSLog(@"you selected cell"); 75 if(tableView == self.searchDisplayController.searchResultsTableView) 76 { 77 NSLog(@"you selected search result cell"); 78 [self performSegueWithIdentifier:(@"showDetai") sender:self]; 79 } 80} 81 82- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 83{ 84 85 NSIndexPath *indexPath =[self.roomtable indexPathForSelectedRow]; 86 87 NSArray *roomlist = 88@[@"921",@"922",@"923",@"924",@"925",@"931",@"932",@"933",@"934",@"935",@"936",@"937",@"938",@"939",@"941",@"942",@"943",@"944",@"945",@"946",@"947",@"948",@"949",@"951",@"952",@"953",@"954",@"955",@"956",@"957",@"958",@"959"]; 89 90 NSString *title = roomlist[indexPath.row]; 91 92 NSLog(@"you selected %@",title); 93 94 RoomDetailViewController *viewController = (RoomDetailViewController *)[segue destinationViewController]; 95 96 viewController.gettitle = title; 97} 98 99-(void)filterContainsWithSearchText:(NSString *)searchText 100{ 101 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",searchText]; 102 NSLog(@"predicate = %@",searchText); 103 self.dataSource = [self.searchlist filteredArrayUsingPredicate:predicate]; 104} 105-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString; 106{ 107 [self filterContainsWithSearchText:searchString]; 108 return YES; 109} 110 111@end
となっています。
どうすればdidSelectRowAtIndexPathメソッドが呼ばれるようになるのでしょうか?
もしくはもっと簡単に画面遷移できる方法があればご教授お願いします。