0

我已经在分组表视图中显示了数据。数据通过 XML 解析显示在表视图中。我有表格视图的 2 部分,第一部分有三行,第二部分有两行。

  section 1 ->  3 Rows

  section 2 - > 2 Rows.

现在我想检查一下,如果字符串中的任何一个为空,那么我应该删除空单元格,所以我遇到了一些问题,如果我删除了任何空单元格,那么它将更改索引号。那么我该如何检查,任何一个字段都是空的?,因为有时会有更多的空字段出现,所以索引位置会改变。所以请给我发送任何示例代码或链接?我怎样才能做到这一点?

示例代码,

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section       
 {

 if (section == 0) {

    if([userEmail isEqualToString:@" "] || [phoneNumber isEqualToString:@" "] || [firstName isEqualToString:@" "])
    {
        return 2;

    } 

    else {

        return 3;

    }
}
if (section == 1) {

       if(![gradYear isEqualToString:@" "] || ![graduate isEqualToString:@" "]) {

    return 1;
}
    else
   {
        return 2;
     }


return 0;

}

请帮帮我!!!

谢谢。

4

2 回答 2

2

根据我的理解,您不想添加数据为空的行,因此建议您在告诉表格视图有关部分和行的信息之前先处理部分数据。

所以,可能下面的代码可以帮助你......,我已经测试过它你只需要从“viewDidLoad”方法调用方法“prepareSectionData”并在.h文件中定义节数组。

- (void) prepareSectionData {
 NSString *userEmail = @"";
 NSString *phoneNumber = @"";
 NSString *firstName = @"";

 NSString *gradYear = @"";
 NSString *graduate = @"";

 sectionOneArray = [[NSMutableArray alloc] init];
 [self isEmpty:userEmail]?:[sectionOneArray addObject:userEmail];
 [self isEmpty:phoneNumber]?:[sectionOneArray addObject:phoneNumber];
 [self isEmpty:firstName]?:[sectionOneArray addObject:firstName];

 sectionTwoArray = [[NSMutableArray alloc] init];
 [self isEmpty:gradYear]?:[sectionTwoArray addObject:gradYear];
 [self isEmpty:graduate]?:[sectionTwoArray addObject:graduate];
}

 -(BOOL) isEmpty :(NSString*)str{
 if(str == nil || [[str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] length] == 0)
     return YES;
 return NO;
 }

  // Customize the number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 2;
}

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if(section == 0){
    return [sectionOneArray count];
} else if (section == 1) {
    return [sectionTwoArray count];
}
return 0;
}


// Customize the appearance of table view cells.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {



static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}

// Configure the cell.
if(indexPath.section == 0){
    cell.textLabel.text = [sectionOneArray objectAtIndex:indexPath.row];
} else if (indexPath.section == 1) {
    cell.textLabel.text = [sectionTwoArray objectAtIndex:indexPath.row];
}
return cell;
}
于 2011-01-25T12:59:11.223 回答
0

@Pugal Devan,好吧,您可以将数据保存在一个数组中,但在这种情况下,问题是,您必须注意数组边界并为不同部分正确索引。对于每个部分 indexPath.row 将从索引 0 开始,如果您的数据在单个数组中,则您必须自己管理行索引。但如果你想保留它,你可以这样做:

int sectionOneIndex = 0; 
int sectionTwoIndex = 3;
NSMutableArray *sectionArray = [[NSMutableArray alloc] initWithObjects:@"email", @"Name", @"address", @"zipCode", @"country", nil];

以上两个整数代表不同部分元素的起始位置。数组部分的前 3 个对象是第一部分的一部分,后两个对象是第二部分的一部分。现在您需要返回正确的行数。为此,您可以写:

if(section == 0) return [sectionArray count] - (sectionTwoIndex-1); //returns 3
else if(section == 1) return [sectionArray count] - sectionTwoIndex; //returns 2

或者,如果您的计数是静态的,您可以将常量值作为回报。

在您从数组中读取时,您只需将此索引添加到行值中,这将为当前单元格返回元素的正确位置。

// Customize the appearance of table view cells.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath 
*)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
reuseIdentifier:CellIdentifier] autorelease];
}

// Configure the cell.
if(indexPath.section == 0){
cell.textLabel.text = [sectionArray objectAtIndex:indexPath.row + sectionOneIndex];
} else if (indexPath.section == 1) {
cell.textLabel.text = [sectionArray objectAtIndex:indexPath.row + sectionTwoIndex];
}
return cell;
}
于 2011-02-01T07:24:19.073 回答