繁体   English   中英

UITableView:删除单元格

[英]UITableView: Removing cells

伙计们,我在这里有一个小问题。 我正在搜索我的UITableView。 我搜索“ iPhone”,它返回给我一个结果。 没关系。 iPhone只是有一个结果。 但是当我搜索iPad时,有两个结果,它给了我2个结果,但是第一行仍然显示iphone信息。 第二个显示iPad的正确信息。

当我再次单击搜索栏搜索另一个单词时,它为我提供了两行所需的ipad。 但是,当我按下“取消”按钮时,它将返回到iPhone和iPad行。

我在做什么错?

谢谢

单元格和表格方法:

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




        - (UITableViewCell *)tableView:(UITableView *)tableView
                 cellForRowAtIndexPath:(NSIndexPath *)indexPath {
            static NSString *MyIdentifier = @"SearchResult";
            UITableViewCell *cell = [tableView
                                     dequeueReusableCellWithIdentifier:MyIdentifier];

            if (cell == nil) {
                cell =
                [[[UITableViewCell alloc]
                  initWithFrame:CGRectMake(0, 0, 180, 200)
                  reuseIdentifier:MyIdentifier]
                 autorelease];


            UIColor *bkgColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"SearchViewTableCellBackground.png"]];

            UIView* backgroundView = [ [ [ UIView alloc ] initWithFrame:CGRectZero ] autorelease ];
            backgroundView.backgroundColor = bkgColor;
            cell.backgroundView = backgroundView;

            // Foto do produto

            UIView *teste = [[UIView alloc] init];
            teste.frame = CGRectMake(5, 5, 100, 100);
            teste.backgroundColor = [UIColor blueColor];
            [cell addSubview:teste];


            // Label de Marca

            UILabel *marca = [[UILabel alloc] init];
            marca.frame = CGRectMake(115, 10, 195, 25);
            marca.backgroundColor = [UIColor clearColor];
            marca.textColor = [UIColor grayColor];
            NSString *marcaString = [self.listMarca objectAtIndex:indexPath.row];
            marca.font = [UIFont systemFontOfSize:13.0];
            marca.text = marcaString;
            [cell addSubview:marca];
            [marca release];


            // Label do nome do produto

            UILabel *nome = [[UILabel alloc] init];
            nome.frame = CGRectMake(115, 30, 195, 25);
            nome.backgroundColor = [UIColor clearColor];
            nome.textColor = [[UIColor alloc] initWithRed:26.0 / 255 green:177.0 / 255 blue:240.0 / 255 alpha:1.0];

            nome.font = [UIFont boldSystemFontOfSize:25.0];
                NSString *noemString = [self.listName objectAtIndex:indexPath.row];
                nome.text = noemString;
            [cell addSubview:nome];
            [nome release];

            //Preco

            UILabel *preco = [[UILabel alloc] init];
            preco.frame = CGRectMake(115, 55, 195, 25);
            preco.backgroundColor = [UIColor clearColor];
            preco.textColor = [UIColor grayColor];


            // Manda preco e parcela pra tratar

            [self priceFormat:[self.listPreco objectAtIndex:indexPath.row] :[self.listParcela objectAtIndex:indexPath.row]];


            preco.font = [UIFont boldSystemFontOfSize:20.0];
            preco.text = self.precoFinal;
            [cell addSubview:preco];


            //Parcela

            UILabel *parcelaLabel = [[UILabel alloc] init];
            parcelaLabel.frame = CGRectMake(115, 73, 195, 25);
            parcelaLabel.backgroundColor = [UIColor clearColor];
            parcelaLabel.textColor = [UIColor grayColor];
            parcelaLabel.font = [UIFont systemFontOfSize:13.0];
            parcelaLabel.text = self.parcelamentoFinal;

            [cell addSubview:parcelaLabel];

            }



            return cell;
        }

和搜索栏方法:

            - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
                [searchBar setShowsCancelButton:YES animated:YES];
                self.theTableView.allowsSelection = NO;
                self.theTableView.scrollEnabled = NO;
                [theTableView setRowHeight:110];
            }

            - (void)searchDisplayController:(UISearchDisplayController *)controller
             willShowSearchResultsTableView:(UITableView *)tableView
            {
                [tableView setRowHeight:[[self theTableView] rowHeight]];
                tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
                [self.tableData removeAllObjects];
                [self.theTableView reloadData];
            }

            - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
                searchBar.text=@"";

                [searchBar setShowsCancelButton:NO animated:YES];
                [searchBar resignFirstResponder];
                self.theTableView.allowsSelection = YES;
                self.theTableView.scrollEnabled = YES;
            }


            - (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
                return NO;
            }

            - (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {

                // Converte a String do campo de busca

                NSString* buscaGet =
                [searchBar.text stringByAddingPercentEscapesUsingEncoding:
                 NSASCIIStringEncoding];    


                // Conecta com a URL


                NSString *endereco = [[NSString alloc] initWithFormat:@"http://localhost/icomm/test.php?nome=%@", buscaGet];

                // Lê o resultado

                TBXML * tbxml = [[TBXML tbxmlWithURL:[NSURL URLWithString:endereco]] retain];
                TBXMLElement * rootXMLElement = tbxml.rootXMLElement;


                TBXMLElement * item = [TBXML childElementNamed:@"produto" parentElement:rootXMLElement];

                listCod = [[NSMutableArray alloc] init];

                listMarca = [[NSMutableArray alloc] init];

                listName = [[NSMutableArray alloc] init];

                listPreco = [[NSMutableArray alloc] init];

                listParcela = [[NSMutableArray alloc] init];

                while (item) {


                    // Seta a id do produto

                    TBXMLElement * codigo = [TBXML childElementNamed:@"item" parentElement:item];
                    NSString * codProd = [TBXML textForElement:codigo];

                    [self.listCod addObject:codProd];


                    // Seta a marca do produto

                    TBXMLElement * marca = [TBXML childElementNamed:@"marca" parentElement:item];
                    NSString * marcaProd = [TBXML textForElement:marca];    
                    [self.listMarca addObject:marcaProd];

                    // Seta o nome do produto

                    TBXMLElement * nome = [TBXML childElementNamed:@"nome" parentElement:item];
                    NSString * nomeProd = [TBXML textForElement:nome];
                    [self.listName addObject:nomeProd];


                    // Seta o preco do produto

                    TBXMLElement * preco = [TBXML childElementNamed:@"preco" parentElement:item];
                    NSString * precoProd = [TBXML textForElement:preco];    
                    [self.listPreco addObject:precoProd];



                    // Seta o parcela do produto

                    TBXMLElement * parc = [TBXML childElementNamed:@"parcela" parentElement:item];
                    NSString * parcProd = [TBXML textForElement:parc];
                    [self.listParcela addObject:parcProd];




                    // Procura o proximo produto.

                    item = [TBXML nextSiblingNamed:@"produto" searchFromElement:item
                            ];
                }


                NSLog(@"%@", self.listName);

                [searchBar setShowsCancelButton:NO animated:YES];
                [searchBar resignFirstResponder];
                self.theTableView.allowsSelection = YES;
                self.theTableView.scrollEnabled = YES;

                //Remove tudo da table e recarrega

                [[[self searchDisplayController] searchResultsTableView] performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];

                [tableData removeAllObjects];
                [theTableView reloadData];

            }

谢谢大家

您仅在代码的if (cell == nil)部分设置标签。 这仅在第一次创建单元时被称为; 之后,该单元将出队以供重用,并且您不会创建新的单元。 如果要像这样使单元出队,则需要在if语句之外设置文本(以及可能更改的标签的其他任何属性)。 为了获得对标签的引用,您将需要使用标签和viewWithTag:

或者,如果您想简化事情,请不要使您的tableCells出队; 但是如果您有很多单元,可能会导致性能问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM