Когда появится пустое поле, удалили строку в представлении "Сгруппированная таблица" в 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;
}