0

にテーブルビューがあり、テキストフィールドなどに情報を編集および追加できるマスター/詳細アプリケーションがありmasterViewControllerます。詳細ビューにdetailview保存ボタンがあります。rightBarButtonItem彼らが彼らの仕事を保存せず、彼らが反撃した場合、私はUIAlertView彼らが彼らの仕事を保存したいかどうか彼らに尋ねるそのpopsupを持っています。alertviewの背後では、detailviewはまだ閉じられており、masterviewcontrollerが表示されています。

したがって、[保存]をクリックしても、テーブルビューは更新されません。[tableview reloadData]マスタービューコントローラーを使用してviewWillAppearいますが、ユーザーが保存を押す前にビューがアラートビューの背後に表示されるため、機能しません。[tableview reloadData]ここでは、詳細ビューから呼び出されるこのメソッド(または同様のもの)を呼び出します。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

alertViewsデリゲートがdetailviewとして設定されているため、単に呼び出すことはできません[tableview reloadData]。これは、alertviewで保存をプッシュすると、テキストフィールドからすべての情報を取得してplistに保存するためです。[tableView reloadData]alertViewから呼び出す方法はありますか?

4

4 に答える 4

1

私があなたの問題を正しく理解しているなら、あなたはdetailViewボタンがタップされる前に却下していalertViewます。データをどこに保存し、どこから取得するかはわかりませんが、tableViewでユーザーの操作を待ってみてくださいalertView

保存を要求するためにをポップするコードでは、alertView他に何もしません。

- (void)yourBackButtonAction //i assumed this is your method when they hit 'back'
{
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title message:@"Would you like to save your work?" delegate:self cancelButtonTitle:@"No"  otherButtonTitles:@"Yes", nil];

    [alertView show];
    [alertView release];
}

そして、デリゲートメソッドで、データを保存し、detailView:を閉じます。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
     if (buttonIndex == 1) //yes
    {
        //save your data
        [self.navigationController dismissModalViewControllerAnimated:YES];
    }
    else // no
        [self.navigationController dismissModalViewControllerAnimated:YES];
}

今あなたのmasterViewController's viewWillAppear方法で、[self.tableView reloadData]動作するはずです。

于 2012-07-03T07:12:39.290 に答える
1

私はそれを考え出した。私が行ったことはUITableViewController、DetailViewController.hファイルにのプロパティを作成し、masterViewという名前を付けてから、.mファイルに合成しました。次に、masterViewController.mファイルに移動し、メソッドを見つけてtableView:didSelectRowAtIndexPath:、detailsViewController.masterViewプロパティをselfに設定しました(selfはmasterViewControllerです)。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
      self.detailViewController.masterView = self;
}

次に、UIAlertView Saveメソッドに移動し、masterViewstableViewでreloadDataを呼び出しました。

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 1) {
        [masterView.tableView reloadData];
    }
}

これは、以下のような詳細ビューで配列または辞書に情報を渡すのと非常によく似ていtableView indexPath.rowます(これもメソッドに含まれていますtableView:didSelectRowAtIndexPath:) 。

self.detailViewController.detailItem = object;
于 2012-07-03T07:17:49.957 に答える
0

のプロパティを設定してtableview試してください

[self.tableView reloadData]
于 2012-07-03T05:48:06.563 に答える
0

このためのデリゲートメソッドを作成する必要があると思います。

  • プロトコルを作成し、
  • たとえば、内部に1つのメソッドを作成します- (void) updateMyMasterTable;
  • 詳細クラスのようにデリゲートインスタンスを作成しid <ProtocolName> obj;、.hファイルに書き込みます。
  • それを合成します。
  • マスターのテーブルビュー呼び出しをリロードする場合[obj updateMyMasterTable];
  • マスタークラスの.mファイルで- (void) updateMyMasterTableメソッドを実装して呼び出します[tableView reloadData];
于 2012-07-03T05:51:07.297 に答える