Когда появится пустое поле, удалили строку в представлении "Сгруппированная таблица" в iPhone?

Я отобразил данные в сгруппированном табличном представлении. Данные отображаются в табличном представлении при разборе 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;

}

Пожалуйста, помогите мне!!!

Благодарю.

2 ответа

Решение

Насколько я понимаю, вы не хотите добавлять строку, в которой данные пусты, поэтому я не советую вам разбирать данные по разделам, прежде чем рассказывать табличному представлению о разделах и строках.

Итак, следующий код может вам помочь..., я проверил его, вам просто нужно вызвать метод "prepareSectionData" из метода "viewDidLoad" и определить массивы разделов в файле.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;
}

@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;
}
Другие вопросы по тегам