Для каждого данные открывают свои собственные файлы наконечников в табличном представлении

#objective-c #xcode #uitableview

#objective-c #xcode #uitableview

Вопрос:

Эй, ребята, у меня есть табличное представление, отсортированное должным образом, но у меня проблема, все данные в моем табличном представлении открывают один и тот же файл nib, когда я использую этот код:

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
        // Return the number of sections.
        return 4;
}

// Category
- (NSString *)tableView:(UITableView *)tableView 
titleForHeaderInSection:(NSInteger)section {
        if (section == 0) return @"In-Site SEO";
        if (section == 1) return @"Inside Analysis";
        if (section == 2) return @"Ranks N Stuff";
        if (section == 3) return @"Server Info";
        return @"Other";
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        // Return the number of rows in the section.
        if (section == 0) return 7;
        if (section == 1) return 3;
        if (section == 2) return 6;
        if (section == 3) return 5;
        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...
        NSUInteger row = [indexPath row];
        if ( indexPath.section == 1 ) row  = 7;
        if ( indexPath.section == 2 ) row  = 10;
        if ( indexPath.section == 3 ) row  = 16;
        if ( indexPath.section == 4 ) row  = 21;
        cell.textLabel.text = [glossaryArray objectAtIndex:row];

        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

        return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        NSInteger row = [indexPath row];
        if (self.glossaryDetailViewController == nil) {
                GlossaryDetailViewController *aGlossaryDetail = [[GlossaryDetailViewController alloc] initWithNibName:@"GlossaryDetailViewController" bundle:nil];
                self.glossaryDetailViewController = aGlossaryDetail;
                [aGlossaryDetail release];
        }
        glossaryDetailViewController.title = [NSString stringWithFormat:@"%@", [glossaryArray objectAtIndex:row]];

        NewReferencemoi_caAppDelegate *delegate = (NewReferencemoi_caAppDelegate *)[[UIApplication sharedApplication] delegate];
        [delegate.glossaryNavController pushViewController:glossaryDetailViewController animated:YES];
}
  
  • GlossaryDetailViewController — это мой файл реализации, а также я добавил файл nib для этого,

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

Спасибо

Ответ №1:

Чтобы ввести свой стиль кода, вы можете попробовать

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        NSInteger row = [indexPath row];
        NSString *nibName;

        if ( indexPath.section == 1 ) nibName = @"firstNib";
        if ( indexPath.section == 2 ) nibName = @"secondNib";
        if ( indexPath.section == 3 ) nibName = @"thirdNib";
        if ( indexPath.section == 4 ) nibName = @"fourthNib";

        GlossaryDetailViewController *aGlossaryDetail = [[GlossaryDetailViewController alloc] initWithNibName:nibName bundle:nil];
        self.glossaryDetailViewController = aGlossaryDetail;
        [aGlossaryDetail release];

        glossaryDetailViewController.title = [NSString stringWithFormat:@"%@", [glossaryArray objectAtIndex:row]];

        NewReferencemoi_caAppDelegate *delegate = (NewReferencemoi_caAppDelegate *)[[UIApplication sharedApplication] delegate];
        [delegate.glossaryNavController pushViewController:glossaryDetailViewController animated:YES];
}
  

Комментарии:

1. эй, спасибо, я собираюсь попробовать это сейчас, но я хотел бы знать, что такое nibName?

2. nibName — это имя, которое вы используете для инициализатора initWithNibName UIViewController. Это файлы xib interface builder. Взгляните на руководство Apple по программированию ресурсов

3. привет, у меня возникли проблемы при попытке собрать кусочки воедино, я просматривал Руководство по программированию ресурсов, затем я внедрил ваш код, но он сразу же разбился, я не уверен, работает ли ваш код. Если все в порядке, я хочу указать на некоторые вещи, которых я не понимаю. indexPath.section, я не думаю, что мне нужен по 1 файлу с наконечником для каждой категории, в моем .plist у меня есть 21 данные, и я пытаюсь сказать, что когда у меня есть 21 данные в моем списке, я хочу 21 файл с наконечником, каждый наконечник открывает свои собственные данные, потому что у каждого данные в моем .plist будут отличаться от других (извините за мой плохой английский)

4. Для этого if ( indexPath.section == 1 ) nibName = @"firstNib"; и предназначен. Чтобы определить, на основе раздела, какой вид выбран, откройте с помощью one ViewController. Сбросьте, пожалуйста, сообщение об ошибке консоли.