2012-03-13 107 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。