2010-08-11 77 views
0

在我的'分區'UITableView中,我有兩個部分,第一個用於屬性(如名稱),第二個用於編輯可添加對象的部分。 下面是它的照片:根據變量更改某一節中的行數

alt text http://fwdr.org/bm9w

有一個屬性,用戶可以改變(在這種情況下類型),這將改變在第二部分中的行的數目。更具體地說,如果選擇一個屬性,則最大行數爲2,然後將不存在添加新...行。

下面是我試了一下(在我的UITableViewController)...

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    if ([self isToManyRelationshipSection:section]) { 
     NSArray *sectionKeys = [rowKeys objectAtIndex:section]; 
     NSString *row0Key = [sectionKeys objectAtIndex:0]; 
     if ([[NSString stringWithFormat:@"%@", [managedObject valueForKey:@"type"]] 
      isEqualToString:[NSString stringWithFormat:@"One on One"]] && [[managedObject valueForKey:row0Key] count] == 2){ 
      return [[managedObject valueForKey:row0Key] count]; 
     } 
     return [[managedObject valueForKey:row0Key] count] +1; 
    } 
    return [rowLabels countOfNestedArray:section]; 
} 

但是,如果用戶試圖在已經有2行中的應用程序崩潰刪除行,因爲將有相同數量的行在刪除之前和之後。

如何解決此問題並正確執行此操作?

回答

0

我最終以不同於我最初想做的事情來做這件事。

我的推理是,我目前的實施給了我一個錯誤,在調試器,反過來墜毀的應用程序。這個錯誤似乎是不可避免的,所以我決定只是禁用單元格,如果有兩行,而不是隱藏它。

要我tableView:cellForRowAtIndexPath:方法做到這一點我加了(在我if語句)下面的代碼,使它看起來無法選擇用戶:

cell.textLabel.textColor = [UIColor lightGrayColor]; 
cell.editingAccessoryType = UITableViewCellAccessoryNone; 

而在tableView:didSelectRowAtIndexPath:方法我離開了我if聲明空白,所以它不會推另一個視圖控制器或添加一個對象。雖然我沒有包含這些代碼以取消該行:

[self.tableView deselectRowAtIndexPath:indexPath animated:NO]; 
0

首先,numberOfRows ..方法在我看來不是做這種邏輯的適當位置。我寧願創建一個獨立的方法來確定並返回當前的遊戲模式(並且在用戶選擇另一種模式時保持遊戲模式更新)。我將整數與遊戲模式相關聯(1 =「一對一」,2 =「全部相對於......」),這樣在numberOfRows方法中,您只需檢查「是當前部分== 1?」。 & &「我們在哪種遊戲模式?」以確定需要多少行。

如果您正確地跟蹤遊戲模式,則不需要再檢查相同的字符串了。

+0

的問題是,我也檢查,如果中行的節數爲2,所以後來我返回對象的實際數量,否則我返回添加對象爲Add New ...行。這就是我得到這個錯誤的原因,因爲一旦該行被刪除,計數小於2,那麼它就會返回一行。這意味着前後有2行。 – Joshua 2010-08-11 16:29:29

+0

我會保持用戶界面和它背後的邏輯分離。您正在查看用戶界面的當前狀態,以確定您的遊戲處於何種狀態,更糟糕的是,您在更新時更新它,可以這麼說。你應該這樣做 - 對於每一個用戶動作,你都會更新一組代表你的遊戲狀態的變量。之後,你根據(僅限!!)更新你的界面到更新的遊戲狀態...... – Toastor 2010-08-11 16:57:36

+0

不,我明白了,並創建了像你所說的整數,這取決於遊戲模式。 **我的問題是在**部分中有2行時隱藏「添加新行......」行,就像我在第一條評論中所解釋的那樣。 – Joshua 2010-08-11 17:02:23

相關問題