在一个通用的UIView中重载数据



通常这听起来像是一个非常简单的任务:我有一个视图,我想在另一个视图中更改后重新加载它的数据。但是:它不是一个UITableView,我没有使用InterfaceBuilde,视图是通过编程创建的。TextFields中显示的值保存在NSDictionary中。在另一个视图中,要显示的值的键被更改了,所以如果视图再次返回,我希望查看新值。下面是我的代码:

- (void)loadView 
{
...
NSMutableDictionary *selection = [[ValueDispatcher dispatcher] selectionIndex];
NSDictionary *labels = [[ValueDispatcher dispatcher] labelDic];    
NSDictionary *values = [[ValueDispatcher dispatcher] valDic];
NSEnumerator *theKeys = [labels keyEnumerator];
while (key = [theKeys nextObject])
{
    CGRect frame = CGRectMake(10, i, 300, 30 );
    UILabel *label = [[UILabel alloc] initWithFrame:frame];
    [label setText:[labels objectForKey:key]];
    [[self view] addSubview:label];
    CGRect fieldFrame = CGRectMake(10, i + 40, 300, 30 );
    textField = [[UITextField alloc] initWithFrame:fieldFrame];
    [textField setText:[[values objectForKey:key] objectForKey:[selection objectForKey:key]]];
    [[self view] addSubview:textField];
}
    ....

当我的视图返回时,旧的值列表仍然显示,没有任何变化。我应该使用哪种方法?我已经尝试过reloadInputViews,但它没有工作,其他方法我只知道(reloadData)只适用于TableView.

如果视图被隐藏/推送/离开屏幕,同时改变值,并通过例如从导航堆栈弹出之后变得可见,您可以考虑使用viewWillAppear:animated:来更新您的字段。在任何情况下,您都应该解耦更新和视图创建。

也就是说,在loadView中,只需创建这些视图,并在另一个方法(例如updateData)中更新它们显示的数据。为了保存对这些子视图的引用,你可以在viewController中使用标签或适当的实例变量。

在loadView中,你可以手动调用updateDataviewWillAppear:animated:

最新更新