2

我有一个包含 2 个部分的 tableView。我现在可以容纳 3 行,第一部分的前 2 行和第二部分的 1 行。每当我收到来自服务器的文本时,我都希望在第二部分的第一个位置插入一个新行。像这样:

---------       ---------
|  0-0  |       |  0-0  |
---------       ---------
|  0-1  |------>|  0-1  |
---------       ---------
|  1-0  |       |new 1-0|
---------       ---------
                |  1-1  |
                ---------

我尝试使用表视图的 insertRowsAtIndexPath 和 reloadSections 方法,但它们都在节的开头添加了一个新行,但也复制了第一节的行(在这种情况下为 2)。像这样:

---------       ---------
|  0-0  |       |  0-0  |
---------       ---------
|  0-1  |------>|  0-1  |
---------       ---------
|  1-0  |       |  0-0  |
---------       ---------
                |  0-1  |
                ---------
                |new 1-0|
                ---------
                |  1-1  |
                ---------

我在通过 NSNotificationCenter 接收通知时添加了一个新行,这是代码片段:

-(void)receiveNotification:(NSString *)notification
{
    [myArray1 insertObject:notification atIndex:0];

    [self.tblView reloadSections:[NSIndexSet indexSetWithIndex:1] withRowAnimation:UITableViewRowAnimationNone];

//  Alternate Code  
//  [self.tblView beginUpdates];
//  [self.tblView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:1]] withRowAnimation:UITableViewRowAnimationNone];
//  [self.tblView endUpdates];

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

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (section == 0)
        return [myArray0 count];
    else
        return [myArray1 count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == 0)
    {
        static NSString *cellId = @"cell0";
        Section0 *cell0 = [tableView dequeueReusableCellWithIdentifier:cellId];
        //Manage first section cell

        return cell0;
    }
    else
    {
        static NSString *cellId = @"cell1";
        Section0 *cell1 = [tableView dequeueReusableCellWithIdentifier:cellId];
        // Manage second section cell

        return cell1;
    }
}
4

2 回答 2

0

上述解决方案有效。发现在 viewDidLoad 的某个地方,除了 receiveNotification 方法中的那个之外,我还需要重新加载我的数据源(数组)和 tableView reloadData 方法。删除 viewDidLoad 中的调用解决了这个问题。

于 2015-04-09T04:20:30.473 回答
-2

尝试这个,

在重新加载表格之前,只需替换您的数组,如下所示:

 NSArray *copy = [mutableArray copy];
 NSInteger index = [copy count] - 1;

 for (id object in [copy reverseObjectEnumerator]) {
     if ([mutableArray indexOfObject:object inRange:NSMakeRange(0, index)] != NSNotFound) {
          [mutableArray removeObjectAtIndex:index];
 }
   index--;
}
于 2015-04-08T13:34:06.500 回答