从 UIViewController 导航回来时,无法在 UITableViewController 中更新 Table



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

我能够将值从 th enter code here e 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

第一个表格单元格只是一个带有按钮的单元格。我有一个按钮的按钮UIView控制器。

In viewWillAppear: use [tableView reloadData]。

- (void)viewWillAppear:(BOOL)animated
{
     [tableView reloadData];
}

首先确保模型已更新,以便cellForRowAtIndexPath:返回正确的单元格。

然后使用以下方法之一更新viewWillAppear中的单元格:

- (void)reloadData
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

您似乎并不完全了解 UITableView 委托和数据源实现。一些提示:


  1. 由于您使用的是情节提要,因此在选择单元格时,控件从静态表单元格拖动到您希望显示的视图控制器,这将自动创建一个 segue(您可能知道这一点),这样您就不必担心实现 didDeselectRowAtIndexPath,您可以将每个静态单元格连接到不同的 VC。
  2. 您的 UITableViewController 类中可能已经有一个数据源,例如 detailLabel 的 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];

}

您必须使用 tableView:CellForRowAtIndex: 来更新单元格的内容,就像最初创建单元格一样。当应用返回到列表时(在另一个视图中更新设置后),将自动调用 tableView:CellForRowAtIndex: 。

更正:tableView:cellForRowAtIndex 不会自动调用。

[tableView ReloadData];

相关内容

  • 没有找到相关文章