2012-03-13 111 views
1

我有一个相当复杂的子类UITableViewController。最重要的是,根据用户设置(在不同的视图中访问),tableview中的数据可以通过三种方式之一进行排序。每个设置都需要对tableview进行不同的排序和分组,尽管行中项目的行为是常见的(例如,无论显示设置如何,每行的select动作都是相同的。类似地,顶部和底部工具栏是一致的)。这会导致我的代码基于应用的用户设置进行大量分支。在不同的表格视图之间切换

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

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

回答

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 
    } 
} 

您只需要在表格的每种方法中按排序类型进行操作。

我希望有帮助。

+0

谢谢,但这是我目前有 - 每个方法的三个if子句,所以很多难以阅读的代码。我想知道是否有办法将它们移入子类或以其他方式划分功能。 – 2012-03-14 02:12:34

0

你可以为tableview数据源设置一个参数,比如“hot”,“new”,“near”,当用户切换tableview时,你可以改变params的值,然后重新加载你的tableview。