iOSのメモをまねてみる:UITableViewにUISearchBarをいれてほにゃらら

2013年8月15日木曜日

ぱくり

t f B! P L
 iOSのメモをぱくろうシリーズ。

 メモはテーブル画面で下に引っ張るとSearchBarがでてきて、検索ができます。Storyboardでやっているので、Search Bar and Search Display Controller を追加します。

 間違えて一度SearchBarを追加して消してやり直したりしていたら、Storyboardがしばらくおかしくなっていてしばらくはまりました。
  • Storyboardから一度どちらも消す
  • プロジェクトを閉じる
  • Storyboardのファイル(xml)をエディタで開いて、SearchBarぽいやつを全部消す
 等々でやっと解決。

 Cocoaの日々: UISearchDisplayController と NSFetchedResultContoller を組み合わせる (3) 考察 をみたり、諸々をみて色々やって、できたー!

 と思いきや、行をタップしたときがうまくいきません。didSelectRowAtIndexPath は反応しているのですが、はて、segue で画面遷移しているから、何かしないとだめなんではないかとあれこれしらべて、以下のようなのを追加してみました。

        if(tableView == self.searchDisplayController.searchResultsTableView) {
            [self performSegueWithIdentifier:@"showDetail" sender:self];
        }

検索結果だったら、segueを実行するようにするらしいです。。かつ、prepareForSegue のほうで、以下のような分岐をいれます。

    if ([[segue identifier] isEqualToString:@"showDetail"]) {
        NSIndexPath *indexPath;
        if([self.searchDisplayController isActive]) {
            indexPath = [self.searchDisplayController.searchResultsTableView indexPathForSelectedRow];
        } else {
            indexPath = [self.tableView indexPathForSelectedRow];
        }
        Memo *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
        [[segue destinationViewController] setDetailItem:object];
    }
     [[segue destinationViewController] setManagedObjectContext:self.fetchedResultsController.managedObjectContext];

これで動くようになった(?)のですが、行った先で編集してデータを更新すると、その時点で何かエラーがでています。。もどってきても再検索できません。。。

このブログを検索

QooQ