Swift 在容器视图中访问和更新表视图
Swift accessing and updating tableview in container view
这有点令人困惑,但我会尽力解释。我有一个带有容器视图的视图控制器。在容器视图中是一个 table 视图。我想从主视图控制器更新 table 视图。例如,table 视图将包含一个名称列表。当用户在文本字段中输入名称时,table 视图将更新以查找与用户输入内容相匹配的名称。
主要问题是:
如何从主视图控制器更新 table 视图?
注意:我无法使用 prepare for segue,因为数据会发生变化。
这实际上是一个初学者问题,我很乐意提供帮助。您需要找到一个地方来存储您的数据,然后您可以根据需要访问它。也就是我们通常所说的模型。
您可以利用其中一种设计模式:共享实例。它将在应用程序生命周期中存在。请参阅以下示例。
您可以拥有这样的模型 class:
// .h
@interface DataManager : NSObject
+ (instancetype)sharedManager;
@property (strong, nonatomic, readonly) NSMutableArray *data;
@end
// .m
@interface DataManager : NSObject
@property (strong, nonatomic, readwrite) NSMutableArray *data;
@end
@implementation DataManager
+ (instancetype) sharedManager {
static DataManager *sharedInstance = nil;
static dispatch_once_t dispatchOnce;
dispatch_once(&dispatchOnce, ^{
sharedInstance = [[self alloc] init];
sharedInstance.data = [[NSMutableArray alloc] initWithCapacity:5];
});
return sharedInstance;
}
@end
使用它,您可以通过主视图控制器或呈现视图控制器访问您的数据。
我想通了...
我可以通过 childviewcontrollers 访问视图。这是我使用的代码:
let childView = self.childViewControllers.last as! ViewController
childView.List = self.nameList
childView.tableView.reloadData()
这有点令人困惑,但我会尽力解释。我有一个带有容器视图的视图控制器。在容器视图中是一个 table 视图。我想从主视图控制器更新 table 视图。例如,table 视图将包含一个名称列表。当用户在文本字段中输入名称时,table 视图将更新以查找与用户输入内容相匹配的名称。
主要问题是:
如何从主视图控制器更新 table 视图?
注意:我无法使用 prepare for segue,因为数据会发生变化。
这实际上是一个初学者问题,我很乐意提供帮助。您需要找到一个地方来存储您的数据,然后您可以根据需要访问它。也就是我们通常所说的模型。
您可以利用其中一种设计模式:共享实例。它将在应用程序生命周期中存在。请参阅以下示例。
您可以拥有这样的模型 class:
// .h
@interface DataManager : NSObject
+ (instancetype)sharedManager;
@property (strong, nonatomic, readonly) NSMutableArray *data;
@end
// .m
@interface DataManager : NSObject
@property (strong, nonatomic, readwrite) NSMutableArray *data;
@end
@implementation DataManager
+ (instancetype) sharedManager {
static DataManager *sharedInstance = nil;
static dispatch_once_t dispatchOnce;
dispatch_once(&dispatchOnce, ^{
sharedInstance = [[self alloc] init];
sharedInstance.data = [[NSMutableArray alloc] initWithCapacity:5];
});
return sharedInstance;
}
@end
使用它,您可以通过主视图控制器或呈现视图控制器访问您的数据。
我想通了...
我可以通过 childviewcontrollers 访问视图。这是我使用的代码:
let childView = self.childViewControllers.last as! ViewController
childView.List = self.nameList
childView.tableView.reloadData()