在不同的表视图之间切换

时间:2012-03-13 21:48:48

标签: objective-c ios cocoa-touch uitableview

我有一个相当复杂的子类UITableViewController。除此之外,tableview中的数据可以基于用户设置(在不同视图上访问)以三种方式之一进行排序。每个设置都需要对tableview进行不同的排序和分组,尽管行中项目的行为很常见(例如,无论显示设置如何,每行的选择操作都是相同的。同样,顶部和底部工具栏是一致的)。这导致我的代码基于应用的用户设置进行大量分支。

有一种很好的方法可以将它分开一点吗?我考虑了UITableView的三个独立子类,但后来我失去了共性。那么也许是一个抽象的自定义UITableView子类,有三个继承自那里的子类?设置更改后如何在实例之间切换?

也许你有更好的主意?由于只有tableview本身的内容发生了变化,我希望避免重复和维护相同的代码三次。

2 个答案:

答案 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。