我有2个班,classA和classB
在classA中,我有一个tableview,可以按需工作和刷新。所有委托和数据源都很好,还有一个属性@property (nonatomic, retain) UITableView *myTableView;
我不想将reloadData
放在classA的viewDidAppear或viewWillAppear中。
我想从classB中解雇[myTable reloadData]
。
由于
答案 0 :(得分:16)
使用代理人重新加载您的tableview。
在tableview所在的类中,将其写入viewDidLoad:
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"updateLeftTable"
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(checkRes:) name:@"updateLeftTable" object:nil];
然后在同一个类中实现它的功能:
-(void)checkRes:(NSNotification *)notification
{
if ([[notification name] isEqualToString:@"updateLeftTable"])
{
[_rearTableView reloadData];
}
}
最后,在您要重新加载tableview的类中 粘贴以下行(重要的是,此行放在您要重新加载tableview的方法中):
[[NSNotificationCenter defaultCenter] postNotificationName:@"updateLeftTable" object:self];
告诉我你是否有任何问题。
答案 1 :(得分:1)
当你调用classA * test = [[classA alloc] init]时; ,它会创建A类的新对象,并且对于您在此类中声明的每个变量,它都具有nil值。这就是为什么你的reloaddata不被称为becoz你的数组对于你用来重新加载表的这个对象有nil值。
您必须使用委托将类A的对象传递给B类。然后尝试从此委托对象重新加载表。
答案 2 :(得分:1)
ClassB.h
@protocol ClassBDelegate <NSObject>
-(void)reloadTableView;
@end
@property (nonatomic,weak)id<ClassBDelegate>delegate;
ClassB.m
-(void)methodForReloadingTableViewInClassA
{
[self.delegate reloadTableView];
}
Class A.h
#import ClassB.h
@interface ClassA : UITableViewController<UITableViewDelegate,UITableViewDatasource,ClassBDelegate>
{
}
ClassA.m
-(void)createClassB
{
ClassB *obj = [[ClassB alloc]init];
obj.delegate = self;
}
//delagte method of class B
-(void)reloadTableView
{
[self.tableView reloadData];
}
答案 3 :(得分:0)
我想你应该由代表重新加载。
这里你的ClassB.h在这里你需要添加你的代表
@property (nonatomic, strong) id myDelegate;
这里你的ClassA.m当你要去ClassB时,他的代表就是出示了ClassA
ClassB *goNext = [[ClassB alloc] initWithNibName:@"ClassB" bundle:nil];
goNext.myDelegate = self; // ALL YOUR BASE ARE BELONG TO US!
[self.navigationController pushViewController:goNext animated:YES];
下一步。当你想重新加载你的classA tableView时,请使用如下代码:
if (myDelegate && [myDelegate respondsToSelector:@selector(reloadMyTV)]){
[myDelegate performSelector:@selector(reloadMyTV) withObject:nil];
}
其中“reloadMyTV”是ClassA的方法:
-(void) reloadMyTV {
[myTableView reloadData];
}
希望我记得代表们足够好)我是通过记忆写的)) 希望它会有所帮助
答案 4 :(得分:0)
答案 5 :(得分:0)
调用reloadData方法会在调用方法后立即刷新数据。在调用reloadData之前,请确保更改了数据源(数组或字典或保存值的位置)。
你应该尝试重新加载主线程上的数据: [tableView performSelectorOnMainThread:@selector(reloadData)withObject:nil waitUntilDone:NO];
答案 6 :(得分:0)
检查您的UITableView
媒体资源在您拨打reloadData
时是否有效。 UIViewController
是通过调用alloc init
创建的,但您的视图目前处于无效状态。在reloadData代码行中设置断点并检查你.tableView == nil?