2011-10-21 25 views
1

這是我在這個真棒網站的第一個問題。我真的搜索了很多,但找到了下一個問題的答案。目標c - 刪除表格視圖的行

我有9個單元格的表格視圖。其中一個單元格中有一個開關按鈕。當切換的按鈕值發生變化時,我想刪除表格視圖的兩行。我已經寫了下面的代碼:

- (IBAction)switchValueChanged:(id)sender { 
NSLog(@"%@", ([switch isOn]) ? @"ON" : @"OFF"); 

NSArray *deleteIndexPaths = [NSArray arrayWithObjects: 
          [NSIndexPath indexPathForRow:1 inSection:0], 
          [NSIndexPath indexPathForRow:2 inSection:0], 
          nil]; 

UITableView *tableView = (UITableView *)self.view; 

[tableView beginUpdates]; 

[tableView deleteRowsAtIndexPaths:deleteIndexPaths withRowAnimation:UITableViewRowAnimationFade]; 
// I Have to change the number of rows in the section here. 

[tableView endUpdates]; 
} 

當我運行它,我得到關於在部分的行數的問題 - 這個數字已經改變,所以我需要去改變它。我真的無法找到我如何改變它,但我知道我必須改變它(見代碼)。

我該怎麼辦?我怎樣才能調用方法numberOfRowsInSection:NSInteger並設置行?

非常感謝你:)

回答

2

行的表中的數字是在你的

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

你需要這個以匹配表中行數

----編輯

這意味着你將需要跟蹤你的表中的行數。

開始用這套9和刪除2,每一次改變開關

- (IBAction)switchValueChanged:(id)sender { 
    NSLog(@"%@", ([switch isOn]) ? @"ON" : @"OFF"); 

    // We are going to delete 2 rows 
    numberOfRows -= 2; 
    ... 

,並在您numberOfRowsInSection而不是每次都返回9,返回新的行數時

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return numberOfRows; 
} 
+0

但是我怎樣才能調用這個方法?我已經實現了這個方法,設置它返回9.我必須再次實現這個方法嗎? – ozking

+0

查看我的編輯瞭解更多詳情。基本上,你必須返回表中的行數delete_之後 - 表視圖會自動爲你調用它。您正在刪除兩行,因此您需要返回7而不是9。 – deanWombourne

+0

我已成功,謝謝:) – ozking

0

您應該刪除數據源中的數據而不是表格單元格,然後僅刷新表格視圖。至少這是我如何做設計。

+0

我沒有數據源,我手動創建了這些單元。我無法刪除它們,因爲我必須稍後插入它們。 – ozking

+0

然後,您需要兩個單元格陣列 - 一個用於當前可見的單元格,一個用於已刪除的單元格。在您的switchvaluechanged方法中,移動數組之間的兩個單元格。當你實現numberOfRowsInSection時不返回9,返回可見單元格數組中的項目數。 – deanWombourne

+0

或者您可以在每個對象上放置一個標誌:displayTheObject,然後(如deanWombourne提到的)只返回沒有該標誌的對象的數量。 – alinoz

0

您還必須從表視圖的數據源中刪除數據。數據源是容納表格視圖上顯示的實際數據的任何容器。只刪除行只會刪除行的可視項,當tableview被重新加載時 - 它將要繪製9-2行....但由於行數仍然返回9,它會拋出一個不一致的異常並告訴你爲什麼。仔細查看日誌。