iphone中的tableView没有更新

Posted

技术标签:

【中文标题】iphone中的tableView没有更新【英文标题】:tableView not updating in iphone 【发布时间】:2012-06-22 05:40:20 【问题描述】:

我正在开发一个类似于 iphone 中的设置应用程序的应用程序。

在我的第一个 VC 中,我在选择第二个 VC 时有 4 行。我的第二个 VC 显示项目列表。用户选择后,所选文本应显示在与所选文本相邻的 firstVC 上。 如何在字典对象或其他方式的帮助下实现它。提前感谢...

【问题讨论】:

你还在为这个问题苦恼吗?? @tGilani 我已经通过创建代表解决了这个问题,正如你在下面建议的那样,......谢谢你的兴趣,如果你有其他方法可以解决它,那么你可以告诉我!谢谢。:) 【参考方案1】:

几天前我做了一个类似的任务,这就是我如何完成的。请注意,实现您想要的目标可能有很多替代方案。

KeyPoint:UITableView 依赖于它的 DataSource(数组或字典),以便在单元格中显示其数据以及每个部分的节数和行数。

现在,最初您的 DataSource 具有显示为默认值的值。点击该行后,初始化 2ndViewController 并将其推送到导航堆栈上。在这个 2ndViewController 中,您必须以某种方式更新 1stViewController 的 DataSource(替换原始值)。

方法一

您可以使用协议和委托

如下创建一个协议。

@protocol MyTableDelegate 
- (void) dismissWithData:(NSString*)data;

在 2ndViewController 中创建一个委托引用,调用该委托方法并传递选定的数据

@interface 2ndViewController : UIViewController
@property (assign) id<MyTableDelegate> delegate;
@property (assign) NSIndexPath *ip;
// Also synthesize it

@implementation 2ndViewController
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    [self.delegate dismissWithData:@"Second Table Selection"];
    [self.navigationController popViewControllerAnimated:YES];

现在在 1stViewController 中,实现 TableView & Protocol 方法

@interface 1stViewController : UIViewController <MyTableDelegate>

@implementation 1stViewController

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    2ndViewController *controller = [[2ndViewController alloc] initWithNib....];
    // Set the Delegate to Self
    controller.delegate = self;
    self.ip = indexPath;
    // Push Controller on to Navigation Stack


- (void) dismissWithData: (NSString*) data

     // We Will Store NSIndexPath ip in didSelectRowAtIndex method
     // Use the ip to get the Appropriate index of DataSource Array
     // And replace it with incoming data         // Reload TableView
     [self.dataSource replaceObjectAtIndex:[ip row] withObject:data];
     [self.tableView reloadData];

方法2

您也可以在 didSelectRowAtIndexPath 方法中将数据源传递给 2ndViewController..

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    2ndViewController *controller = [[2ndViewController alloc] initWithNib....];
    controller.dataArray = self.dataSource;
    // Push Controller on to Stack

然后在2ndViewController的同一个didSelectRowAtIndexPath方法中,更新数据源,调用

[self.navigationController popViewControllerAnimated:YES];

另外,您需要在 1stController 的 ViewWillAppear 方法中重新加载您的表格视图

- (void)ViewWillAppear:(BOOL)animated

     [self.tableView reloadData];
     [super ViewWillAppear:animated];

【讨论】:

【参考方案2】:

我认为您需要在 viewDidAppear 中调用 [self.tableView reloadData]。如果可能,请通过此链接Reload UITableView when navigating back?

【讨论】:

【参考方案3】:

您在第一个 VC 中使用的数组。将该数组传递给第二个 VC,在 secondVC 类中对其进行更新,然后在 firstVC 类的 viewWillAppear 方法中写入此语句“[firstVC.tableView reloadData]”。

当用户在 secondVC 类中选择任何内容时,这将更新您在 secondVC 类中的 firstVC 类数组,而不是当用户重新加载 firstVC 的返回表视图时。以便更新数组反映在表格视图中。

【讨论】:

以上是关于iphone中的tableView没有更新的主要内容,如果未能解决你的问题,请参考以下文章

javaFX tableView中嵌入

在选择 tableview 项目时更新 ViewController 文本框

iphone:SDK 披露按钮没有从第一个 TableView 响应到第二个详细 TableView?

Swift 2:从单独的标签栏控制器更新 TableView

NSFetchedResultsController 没有正确更新 tableView

iPhone 4.3 的 Tableview 中的多个单元格选择