2

私はこれに不慣れです。Tableviewを備えたアプリケーションがあり、セルを押すと、DetailViewに移動します。ここで問題となるのは、Detailview内にtextFieldがあり、保存ボタンを押した後、ユーザーが元のセルのdetailTextLabelセグメントにキーバックしたデータをロードしたいということです。

どうすればそうできますか?以下は私が持っているものです:

DetailViewController.m

//save button
-(IBAction) SendTextFieldtoViewController:(id)sender { 

    NSString *grabKeyedData = self.inputField.text;
    ViewController *mainController =[self.storyboard instantiateViewControllerWithIndentfier:@"mainController"];

    [mainController GrabbedKeyData: grabKeyedData];
}

ViewController.m

-(void) GrabbedKeyData:(NSString *)text{

    grabData = text;

    NSLog(@" data: %@",text);
    [tableView reloadData];
}


-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {

.....

  if(grabData == nil){
      [[cell detailTextLabel] setText:@"no data"];
  }else{
      [[cell detailTextLabel] setText:grabData];
  }

データを-(void)GrabbedKeyDataに渡すことができ、渡されたデータをNSLogから読み取ることができます。しかし、ViewControllerに戻ったときに、テーブルが更新されていないようです。

4

2 に答える 2

1

問題は2つのうちの1つである可能性があると思います。あなたの質問では、「ViewControllerに戻る」と言いますが、最初に戻ったのではなく、新しいものを作成しています。ストーリーボードのViewControllerからプッシュして詳細コントローラーに到達した場合、これはそれを行う方法ではありません。ViewControllerの元のインスタンスへの参照を取得するか、プロトコルを使用する必要があります(これは、Appleがデータをコントローラーに送り返すために推奨する標準的な方法です)。その参照を取得する方法はいくつかあります。たとえば、mainControllerと呼ばれる詳細コントローラーにプロパティを設定し、ViewControllerが詳細コントローラーをプッシュするときにそのプロパティの値として自分自身を設定することができます。

もう1つの考えられる問題は、単純な問題です。テーブルは、detailTextLabelを持つセルではなく、プレーンセルを使用しています。IBで正しい種類のセルを設定していることを確認してください。

于 2013-02-16T17:21:44.540 に答える
0
-(IBAction) SendTextFieldtoViewController:(id)sender 
{ 
    NSString *grabKeyedData = self.inputField.text;
    [mainController GrabbedKeyData: grabKeyedData];
    ViewController *mainController =[self.storyboard instantiateViewControllerWithIndentfier:@"mainController"];
}


-(void) GrabbedKeyData:(NSString *)text
{
  self.keyDataArray = [[NSMutableArray alloc] initWithObjects:text, nil];
  NSLog(@" data: %@",text);
  [tableView reloadData];
}

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath {

.....

  NSString *grabbedName = [keyDataArray objectAtIndex:0];
  NSLog(@" cell text is :%@",grabbedName);

  [[cell detailTextLabel] setText:grabbedName];
}

NSStringオブジェクトのみをarray.soに格納しています。これは、配列の0番目のインデックスに格納されています。

于 2013-02-16T13:36:21.547 に答える