2013-03-09 101 views
2

在我的應用程序中,我有一個UITableView,我有兩個不同的自定義UITableViewCells。 UITableView最初加載了一種自定義的UITableViewCell。當我的UITableView中選擇其中一個單元格時,我想更改使用其他類型的自定義UITableViewCell選擇的單元格。這可能嗎?讓我聽聽你有什麼。選擇時更改UITableViewCell

感謝, NSNolan

#pragma mark - UITableView delegate methods 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [self.array count]; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{  
    if(indexPath.row == [self currentCellIndex]) { 
     [self setCurrentCellIndex:-1]; 

     NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:@"NewCell" owner:self options:nil]; 

     OldCell *cell = (OldCell *)[tableView cellForRowAtIndexPath:indexPath]; 
     cell = [nibs objectAtIndex:0]; 
    } 
    else { 
     [self setCurrentCellIndex:indexPath.row]; 

     NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:@"NewCell" owner:self options:nil]; 

     NewCell *cell = (NewCell *)[tableView cellForRowAtIndexPath:indexPath]; 
     cell = [nibs objectAtIndex:0]; 
    }   
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *cellIdentifier = @"OldCell"; 

    OldCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
    if (cell == nil) { 
     NSArray *nibs = [[NSBundle mainBundle] loadNibNamed:@"OldCell" owner:self options:nil]; 
     cell = [nibs objectAtIndex:0]; 
    } 

    return cell; 
} 
+0

有特別的代碼塊給你帶來麻煩嗎? http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/AboutTableViewsiPhone/AboutTableViewsiPhone.html#//apple_ref/doc/uid/TP40007451 – 2013-03-09 04:37:06

+0

我不遵循你所要求的或者鏈接的相關性。 – NSNolan 2013-03-09 04:38:42

+0

您可以通過保存當前所選indexPath的實例變量來實現此目的。然後重新加載tableview。在cellForRowAtIndexPath中:您可以檢查indexPath是否等於selectedIndexPath,然後初始化第二個自定義單元格。 – Anupdas 2013-03-09 04:42:52

回答

6

在你didSelectRow...方法,你需要更新表示小區的新的「模式」的標誌(存儲在一個實例變量)。然後通過調用tableView reloadRowsAtIndexPaths:withRowAnimation:傳入選定的indexPath來重新加載該行。

在您的cellForRow...方法中,使用標誌來確定用於該行的兩種類型的單元格。

+0

謝謝@rmaddy。完美的作品。 – NSNolan 2013-03-09 05:22:17

相關問題