【问题标题】:Swift accessing and updating tableview in container view在容器视图中快速访问和更新 tableview
【发布时间】:2015-10-05 01:58:56
【问题描述】:

这有点令人困惑,但我会尽力解释。我有一个带有容器视图的视图控制器。在容器视图中是一个表格视图。我想从主视图控制器更新 tableview。例如,表格视图将包含一个名称列表。当用户在文本字段中输入名称时,表格视图将更新以查找与用户输入内容匹配的名称。

主要问题是:

如何从主视图控制器更新表格视图?

注意:我不能使用prepare for segue,因为数据会发生变化。

【问题讨论】:

  • 如果主视图控制器的目的只是保存文本字段,提供搜索功能,您可能需要考虑使用 UISearchBar 和 UISearchController。

标签: ios swift uitableview uicontainerview


【解决方案1】:

我想通了……

我可以通过 childviewcontrollers 访问视图。这是我使用的代码:

    let childView = self.childViewControllers.last as! ViewController
    childView.List = self.nameList
    childView.tableView.reloadData()

【讨论】:

  • 您也可以从子视图中执行相同的操作。而是使用 parentviewcontroller。
  • 我应该把这些代码放在哪里?在父视图控制器或子视图控制器中?
【解决方案2】:

这实际上是一个初学者问题,我很乐意提供帮助。您需要找到一个存储数据的地方,然后您可以根据需要访问它。这就是我们通常所说的模型。

您可以利用其中一种设计模式:共享实例。它将在应用程序生命周期中存在。请参阅以下示例。

你可以有一个这样的模型类:

// .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

使用它,您可以通过主视图控制器或呈现视图控制器访问您的数据。

【讨论】:

    猜你喜欢
    • 2016-02-24
    • 2018-09-26
    • 2018-05-04
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 2015-07-17
    • 2015-06-25
    相关资源
    最近更新 更多