我有一个相当复杂的子类UITableViewController。除此之外,tableview中的数据可以基于用户设置(在不同视图上访问)以三种方式之一进行排序。每个设置都需要对tableview进行不同的排序和分组,尽管行中项目的行为很常见(例如,无论显示设置如何,每行的选择操作都是相同的。同样,顶部和底部工具栏是一致的)。这导致我的代码基于应用的用户设置进行大量分支。
有一种很好的方法可以将它分开一点吗?我考虑了UITableView的三个独立子类,但后来我失去了共性。那么也许是一个抽象的自定义UITableView子类,有三个继承自那里的子类?设置更改后如何在实例之间切换?
也许你有更好的主意?由于只有tableview本身的内容发生了变化,我希望避免重复和维护相同的代码三次。
答案 0 :(得分:0)
这可以使用单个UITableViewController完成。让我们调用UITableViewController RootViewController。
当加载RootViewController时,您可以加载一个指示符,指示将进行哪种类型的排序。我可能只是将设置存储在NSUserDefaults中,并在RootViewController的viewDidLoad方法中加载用户的设置选项。
只需使用该设置选项作为一种标志,如下例所示。
- (NSInteger)tableView:(UITableView *)aTableView
numberOfRowsInSection:(NSInteger)section
{
if ([sortType isEqualToString:@"Name"]) {
// return number of rows
}
else if ([sortType isEqualToString:@"Distance"]) {
// return number of rows
}
else {
// return number of rows
}
}
您只需要在排序类型影响的表的每个方法中执行此操作。
我希望有所帮助。
答案 1 :(得分:0)
您可以为tableview数据源设置params,例如“hot”,“new”,“near”,当用户切换tableview时,您只需更改params的值,然后重新加载tableview。