1

にリンクされているナビゲーションビューコントローラーがありUITableViewControllerます。テーブルViewControllerには、静的セルがあります。テーブルビューセルの右ラベル形式があります。UIViewControllerクリックするとに移動し、UITableViewCell次に戻ってに移動するとUITableViewController、の詳細ラベルを更新したいと思いUITableViewCellます。

enter code here値をに渡すことができUIViewControllerますUITableViewcontroller。を使用してこれを確認しNSLogました。しかし、セルの詳細ラベルを更新できません。

使用-(void) tableView:(UITableView *) tableView didDeselectRowAtIndexPathしましたが、別のテーブルビューセルをクリックしたときにのみテーブルビューセルが更新されるため、これは役に立ちません。に戻ったときにこの更新が自動的に行われるようにしたいUITableViewController

次のリンクを確認してください http://www.icodeblog.com/wp-content/uploads/2011/10/navigation_interface.jpeg

上の画像のようなものが欲しい

これはどのように行うことができますか。

コード用に更新

@interface designTableViewController ()

@end

@implementation designTableViewController
{
    glimmpseliteAppDelegate *appDelegate;
}

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{

    appDelegate = [[UIApplication sharedApplication]delegate];
    [super viewDidLoad];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
}

-(void)viewWillAppear:(BOOL)animated
{

}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    return 8;
}

#pragma mark - Table view delegate

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.row == 1)
    {
        UITableViewCell *tb = [tableView cellForRowAtIndexPath:indexPath];
        UIViewController *uiViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"designSolvingForViewController"];
        [self.navigationController pushViewController:uiViewController animated:YES];
        tb.detailTextLabel.text = appDelegate.solvingFor;


    }
    if(indexPath.row == 2)
    {
        UIViewController *uiViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"designTypeIErrorRate"];
        [self.navigationController pushViewController:uiViewController animated:YES];
        UITableViewCell *tb = [tableView cellForRowAtIndexPath:indexPath];
        tb.detailTextLabel.text = appDelegate.typeIError;
    }
    if(indexPath.row == 3)
    {
        UIViewController *uiViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"designNumberOfGroups"];
        [self.navigationController pushViewController:uiViewController animated:YES];
        UITableViewCell *tb = [tableView cellForRowAtIndexPath:indexPath];
        tb.detailTextLabel.text = appDelegate.numberOfGroups;
    }

    if(indexPath.row == 4)
    {
        UIViewController *uiViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"designRelativeGroupSize"];
        [self.navigationController pushViewController:uiViewController animated:YES];
        UITableViewCell *tb = [tableView cellForRowAtIndexPath:indexPath];
        tb.detailTextLabel.text = appDelegate.relativeGroupSize;
    }

    if(indexPath.row == 5)
    {
        UIViewController *uiViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"designSmallestGroupSize"];
        [self.navigationController pushViewController:uiViewController animated:YES];
        UITableViewCell *tb = [tableView cellForRowAtIndexPath:indexPath];
        tb.detailTextLabel.text = appDelegate.smallestGroupSize;
    }

    if(indexPath.row == 6)
    {
        UIViewController *uiViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"designMeansAndVariance"];
        [self.navigationController pushViewController:uiViewController animated:YES];
        UITableViewCell *tb = [tableView cellForRowAtIndexPath:indexPath];
        tb.detailTextLabel.text = appDelegate.meansAndVariance;
    }
}

- (void) tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if(indexPath.row == 1)
    {
        UITableViewCell *tb = [tableView cellForRowAtIndexPath:indexPath];
        tb.detailTextLabel.text = appDelegate.solvingFor;
    }

    if(indexPath.row == 2)
    {
        UITableViewCell *tb = [tableView cellForRowAtIndexPath:indexPath];
        //tb.textLabel.text =@"Sample";
        tb.detailTextLabel.text = appDelegate.typeIError;
    }

    if(indexPath.row == 3)
    {
        UITableViewCell *tb = [tableView cellForRowAtIndexPath:indexPath];
        //tb.textLabel.text =@"Sample";
        tb.detailTextLabel.text = appDelegate.numberOfGroups;
    }


    if(indexPath.row == 4)
    {
        UITableViewCell *tb = [tableView cellForRowAtIndexPath:indexPath];
        //tb.textLabel.text =@"Sample";
        tb.detailTextLabel.text = appDelegate.relativeGroupSize;
    }

    if(indexPath.row == 5)
    {
        UITableViewCell *tb = [tableView cellForRowAtIndexPath:indexPath];
        //tb.textLabel.text =@"Sample";
        tb.detailTextLabel.text = appDelegate.smallestGroupSize;
    }

    if(indexPath.row == 6)
    {
        UITableViewCell *tb = [tableView cellForRowAtIndexPath:indexPath];
        //tb.textLabel.text =@"Sample";
        tb.detailTextLabel.text = appDelegate.meansAndVariance;
    }
}

@end

最初のテーブルセルは、ボタンのあるセルです。そのボタンのプッシュUIViewControllerがあります。

4

4 に答える 4

1

UITableView デリゲートとデータソースの実装を完全には理解していないようです。いくつかのヒント:


  1. ストーリーボードを使用しているため、セルが選択されたときに表示する静的なテーブル セルからビュー コントローラーへのドラッグを制御すると、セグエが自動的に作成されます (これを認識している可能性があります)。心配する必要はありません。 didDeselectRowAtIndexPath の実装については、各静的セルを異なる VC に接続できます。
  2. UITableViewController クラスに、detailLabel の NSString タイトルの配列などのデータソースが既にある場合があります。tableView:CellForRowAtIndex: では、次のようなコードを作成します。

cell.detailLabel.text = [dataArray objectAtIndex:indexPath.row];

3) これらのタイトルが変更されているビュー コントローラーで、dataArray を新しい値で更新する UITableViewController へのデリゲート接続を確立する必要があります。次に、UITableViewController クラスで setDataArray:(NSArray *)array を次のようにオーバーライドします。

- (void)setDataArray:(NSArray *)array {
    _dataArray = array;  
   [self.tableView reloadData];

}

于 2012-10-17T16:34:55.883 に答える
1

viewWillAppear で: [tableView reloadData] を使用します。

- (void)viewWillAppear:(BOOL)animated
{
     [tableView reloadData];
}
于 2012-08-06T16:47:56.257 に答える
1

cellForRowAtIndexPath:最初に、正しいセルが返されるようにモデルが更新されていることを確認してください。

次に、次のいずれかを使用して のセルを更新しviewWillAppearます。

- (void)reloadData
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
于 2012-08-06T16:48:54.193 に答える
0

最初にセルを作成するときと同じように、セルの内容を更新するには、tableView:CellForRowAtIndex: を使用する必要があります。アプリがリストに戻ると (別のビューで設定が更新された後)、 tableView:CellForRowAtIndex: が自動的に呼び出されます。

訂正: tableView:cellForRowAtIndex は自動的に呼び出されません。あなたのビューでWillAppear: put

[tableView ReloadData];
于 2012-08-06T16:46:52.800 に答える