更改dataSource后,UITableView无法正确刷新

run*_*mad 14 iphone uitableview

我有一个带有几个数据源的UITableView.这是因为,我需要使用UISegmentedControl切换数据,如果我将它们添加为子视图,我就不能使用statusBar向上滚动等.

首先,我显示一个登录屏幕:

self.tableView.dataSource = loginTableView;
self.tableView.delegate = loginTableView;
[self.tableView reloadData];
Run Code Online (Sandbox Code Playgroud)

然后,一旦用户登录,我执行以下操作以更改为索引:segmentedControler的1,这是他们的配置文件:

self.tableView.dataSource = profileTableView;
self.tableView.delegate = profileTableView;
[self.tableView reloadData];
Run Code Online (Sandbox Code Playgroud)

但是,表视图更新,但两个dataSource之间有点混合.一些文本已经改变,一些是重叠的,而一些文本完全缺失.

有没有其他方法我应该更改UITableView的dataSource?

谢谢

Rob*_*Ros 9

我有同样的问题.我的解决方案是使tableView隐藏,更改它的源代码,重新加载数据并使tableView再次可见.

C#(MonoTouch)中的示例:

tableView.Hidden = true;
tableView.Source = newTableViewSource;
tableView.ReloadData();
tableView.Hidden = false;
Run Code Online (Sandbox Code Playgroud)


Cor*_*oyd 4

从您发布的代码中不确定为什么会发生这种情况。

不要更改委托和数据源,而是交换任何 ivar 代表正在显示的数据:

- (NSArray*)tableData{

    if(showingLogin)
        return self.loginData;

    return self.profileData;
}
Run Code Online (Sandbox Code Playgroud)

现在你只有 1 个 UITableViewController 实例,但有一个 BOOL 告诉你要使用哪个数据源。