例如:有这样的需求。IOS客户端有个UITableView的视图,在初始化的时候读取了数据,画出了表单。
晚些时候,后台的数据发生了变化。通知TableView根据新的数据重画表单。这个时候,由于初始化方法已经不可能在被调用。所以无法在重画。
我的解决办法是 ,通过viewDidAppear 的方法里面加入强制重画语句,使得这个TableView再下次显示的时候,按照新的数据重画表单。
这里主要强调的是 强制重画的调用函数
[(UITableView *)([[self.view subviews] objectAtIndex:1]) reloadData];
主要思路是从这个Controller中获得所有的子视图,由于我的nib文件中TableView位于View下面 ,所以他的索引是1,即是第二个子视图。然后对这个变量进行类型装换。再调用reloadData方法。
可以通过 NSLog(@"%@",[(UITableView *)([[self.view subviews] objectAtIndex:1]) description]); 这段代码,来确定类型是否是TableView。如果不是,进行强转,会引起程序崩溃。
reloadData方法,就是要求TableView根据新的数据,重写画表单。我们只需要调用这个方法,就会让委托自己发送请求调用 -(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 这个方法来画cell。