質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

1回答

4523閲覧

TableViewでdidSelectRowAtIndexPathが呼ばれない【初歩ミス?】

grandsn0w

総合スコア14

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2015/07/08 13:09

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メソッドが呼ばれるようになるのでしょうか?
もしくはもっと簡単に画面遷移できる方法があればご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Stripe

2015/07/08 16:59

もちろん、UITableViewDelegateは設定しているんですよね?
guest

回答1

0

これでちゃんとテーブルビューにデータは表示されていますか?
一見したところ、RoomTableViewControllerにUITableViewDelegateとUITableViewDataSourceがセットされていないように見受けられますが・・・

あと、roomtableのdelegateとdatasourceをRoomTableViewContorllerにセットもしていますか?

このあたりが怪しそうです。

投稿2015/07/08 23:56

rifuch

総合スコア1901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

grandsn0w

2015/07/09 16:23

テーブルビューは表示されます。また検索時以外の状態ではセルを選択すると詳細画面への遷移も問題なく動作します。 UITableViewDelegateとUITableViewDataSourceはInterface Builderで設定したはずでしたが・・・。もし設定し忘れていたら、と思いmファイルに記述を加えました。 また、roomtable.delegateとroomtable.datasourceは記述していなかった為、これもmファイルに記述しました。 ソースは以下のようになりました。 @interface RoomTableViewController () <UISearchBarDelegate, UISearchDisplayDelegate, UITableViewDelegate, UITableViewDataSource> @end @implementation RoomTableViewController - (void)viewDidLoad { [super viewDidLoad]; _searchbar.delegate =self; _roomtable.delegate = self; _roomtable.dataSource = self; しかし、ビルドしても動作に変化はありませんでした・・・。 どこか記述の方法がおかしかったのでしょうか?
rifuch

2015/07/10 00:28

ちょっと的外れでしたね。 delegateとdatasourceは問題ないようです。 roomTableとsearchBarは関連づけされていますか? また、self.searchDisplayControllerの宣言はどこでなされていますか? viewDidLoadあたりで、 UISearchDisplayController *searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self]; searchDisplayController.delegate = self; searchDisplayController.searchResultsDelegate = self; searchDisplayController.searchResultsDataSource = self; roomTable.tableHeaderView = searchBar; としてあげていないせいで、 self.searchDisplayController.searchResultsTableViewが見つからない状態になってはいませんか? http://rakuishi.com/archives/3030/ ここが参考になるかと思いますので、ソースを見比べてみるといいかもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問