2012-03-27 31 views
1

的第一個元素我有一個有趣的麻煩:的NSArray

我有填充了一些動物的名稱(字符串)一個NSArray。我使用這個數組來填充UITableView.當你按任何cell(動物)時,你移動到一個詳細的視圖,你讀了更多關於這個動物。然後,我改進了我的應用程序,現在在UITableView第一個單元格是剛纔說的UITableView中有多少動物的單元格。發現

動物::其樣4(第一小區)

  • 狗(第二小區)
  • 貓(第三小區等)
  • 倉鼠

問題是,當你按下第一個單元格時(動物發現:4),你會在隨機動物的詳細視圖中移動。它發生的原因是在index 0的陣列中有一隻動物。因此,你在這個動物的詳細視圖中移動。當用戶按下第一個單元格時,我不想做任何事情。我怎樣才能達到它?

回答

1

我認爲更好的解決辦法是在你的模型來表示你想在你的意見,看看有什麼。所以,我會做這樣的:

myModel = [NSMutableArray arrayWithObjects:@"3 animals", @"dog", @"cat", @"chicken", nil]; 
// here, wherever else my model is altered: 
[myModel replaceObjectAtIndex:0 withObject:[NSString stringWithFormat:@"%d animals", myModel.count-1]]; 

現在不需要特殊的邏輯在其他地方,除非在@ = indexPath.row 0配置單元時的Praveen-K表明...

cell.userInteractionEnabled = NO; 
+0

最好的解決方案,非常感謝。 – SmartTree 2012-03-27 19:39:16

+0

謝謝@danh。我們也可以做到這一點。 – 2012-03-27 19:41:31

4

在您的表視圖的didSelectRowAtIndexPath方法中,如果提供的indexPath參數行爲零,則返回。如果它大於零,則從其中減去一個,並且這將成爲要顯示的項目的數組索引。事情是這樣的:

- (void)tableView:(UITableView *)tv didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tv deselectRowAtIndexPath:[tv indexPathForSelectedRow] animated:YES]; 

    int idx = [indexPath row]; 
    if (idx == 0) 
    { 
     return; 
    } 

    idx--; 
    // use idx as the index into your array of animals as you did initially 
} 
+0

謝謝,它完美的工作。 – SmartTree 2012-03-27 19:36:38

2

基於indexPath.row條件(在你的情況應該是零)

cell.selectionStyle = UITableViewCellSelectionStyleNone;

但這種方法仍然會調用didSelectRowAtIndexPath方法,所以你必須做到以下幾點

cell.userInteractionEnabled = NO;

+0

謝謝,按我想要的方式工作 – SmartTree 2012-03-27 19:37:17

+0

謝謝@SmartTree。基於indexPath.row你應該禁用用戶交互,以避免調用didSelectRowAtIndexPath不必要的(基於你的條件)。所以你甚至不需要檢查你的didSelectRowAtIndexPath。 – 2012-03-27 19:40:52

+0

對,我做到了。主要問題是第一個因素。我的意思是,如果我的數組有4只動物,tableView將只顯示其中的3個,因爲在第一個單元中仍存在1個動物。但是第一個單元格不顯示這個動物,因爲它顯示了tableView中的動物數量。 – SmartTree 2012-03-27 19:44:45

0

試試這個......

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.row ==0) 
     { 
     //Select first Row; 
     } 
    else 
     { 
     //Do What you Want 
     } 
    }