我有 2 个类,classA 和 classB 在 classA 中,我有一个可以按需工作和刷新的表格视图。所有的代表和数据源都很好,还有一个属性@property (nonatomic, retain) UITableView *myTableView;
我不想放入reloadData
classA 的 viewDidAppear 或 viewWillAppear。我想[myTable reloadData]
从 B 级开火。
谢谢
我有 2 个类,classA 和 classB 在 classA 中,我有一个可以按需工作和刷新的表格视图。所有的代表和数据源都很好,还有一个属性@property (nonatomic, retain) UITableView *myTableView;
我不想放入reloadData
classA 的 viewDidAppear 或 viewWillAppear。我想[myTable reloadData]
从 B 级开火。
谢谢
使用委托重新加载您的表格视图。
在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];
如果您有任何问题,请告诉我。
当你调用 classA *test = [[classA alloc]init]; ,它会为您的 A 类创建一个新对象,并且对于您在此类中声明的每个变量,它的值都为零。这就是为什么不调用您的 reloaddata 的原因,因为您的数组对于您用于重新加载表的该对象具有 nil 值。
您必须使用委托将 A 类的对象传递给 B 类。然后尝试从此委托对象重新加载表。
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];
}
我认为你应该由代表重新加载它。
在这里你的 ClassB.h 在这里你需要添加你的代表
@property (nonatomic, strong) id myDelegate;
在这里你的 ClassA.m 当你要去 ClassB 时显示他的代表 t 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];
}
希望我记得代表足够好)我是凭记忆写的))希望它会有所帮助
调用 reloadData 方法会在调用该方法后立即刷新数据。确保在调用 reloadData 之前更改了数据源(数组或字典或保存值的位置)。
您应该尝试在主线程上重新加载数据: [tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
检查您的UITableView
财产在您致电时是否有效reloadData
。UIViewController
是通过调用创建的alloc init
,但您的视图当前处于无效状态。在 reloadData 代码行中设置断点并检查您是 .tableView == nil 吗?