0

編集: この問題を修正しました。この修正を示すようにコードが修正されています。

アルファベット順にセクションに分けられた 50 の状態すべてのリストを表示する UITableViewController を使用するアプリがあります。ストーリーボードのプロトタイプ セルに詳細開示ボタンを追加すると、テーブルに正しい情報がすべて表示されます。

セルのボタンを押すと、新しい viewController にセグエされ、状態の名前がビュー タイトルとして表示され、ビューにナンバー プレートの写真が表示されます。

-(void)tableView:(UITableView *)tableView accessoriesButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath メソッドを使用してボタンの押下を制御し、次に -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id) を使用しています新しいviewControllerに渡される値を制御するsender。

私が抱えている問題は、詳細開示ボタンを押しても何も渡されないことです。新しいviewController出力(null)、(null)の値をNSLoggingし、ビューにはタイトルも画像もありません。ただし、もう一度押してから同じセルの詳細開示ボタンをもう一度押すと、正常に機能します。タイトルは正しく、画像は適切に表示されます。

別のセルを選択した場合も同様で、viewController は最後に送信された情報を表示するため、セルを押し戻して更新するためにもう一度セルを選択する必要があります。初めて別のセルを選択したとき、(null、(null) は NSlog が出力しているものです。そのため、詳細開示ボタンが初めて押されたときは値が渡されず、2 回目は値が渡されなかったと思います。押されると、値が渡されます。

関連するコードは次のとおりです。

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
    //Don't even use this method now.
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
UITableViewCell *cell = (UITableViewCell*)sender;  //Added this line
self.path = [self.tableview indexPathForCell:cell]; //Added this line

if ([segue.identifier isEqualToString:@"stateSegue"])
    {
        self.controller = segue.destinationViewController;
        self.controller.stateName = [self.stateArray[indexPath.section][indexPath.row]stateName];
        self.controller.licensePlateURL = [self.stateArray[indexPath.section][indexPath.row]licensePlateURL];
    }
}

これについての助けをいただければ幸いです。

4

1 に答える 1