1

我有一个导航视图控制器,它与UITableViewController. 在表格视图控制器中,我有静态单元格。我有表格视图单元格的正确标签格式。UIViewController单击时我将导航到,UITableViewCell然后当我导航回我的 时UITableViewController,我想更新我的UITableViewCell.

我能够将值从enter code hereeUIViewController传递到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. 由于您使用的是情节板,因此在选择单元格时将控制拖动从静态表单元格到您希望出现的视图控制器,这将自动创建一个segue(您可能意识到这一点),这样您就不必担心关于实现 didDeselectRowAtIndexPath,您可以将每个静态单元连接到不同的 VC。
  2. 你的 UITableViewController 类中可能已经有一个数据源,例如你的 detailLabel(s) 的 NSString 标题数组。在 tableView:CellForRowAtIndex: 你会想要编写类似的代码

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

3) 在更改这些标题的视图控制器中,您希望建立与 UITableViewController 的委托连接,该连接使用新值更新 dataArray。然后在 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:放

[tableView ReloadData];
于 2012-08-06T16:46:52.800 回答