XML анализирует данные в пользовательском представлении с UILabel вместо UITableView

Привет, будущие друзья, которые помогут мне в этом проекте,

У меня есть эти книги, извлеченные из XML-файла (взято из этого поста, который я нашел). Первое представление (RootViewController) имеет список названий книг в UITable. Когда пользователь нажимает на одну из книг, вместо просмотра сведений о книгах (BooksDetailViewController) во втором UITable я хотел бы, чтобы заголовок, автор и сводка отображались в пользовательском представлении, выложенном в построителе интерфейса с помощью UILabels и UITextView.

IBOutlet UILabel *bookTitle;
IBOutlet UILabel *bookAuthor;
IBOutlet UITextView *bookSummary;

Я считаю, что моя проблема связана с RootViewController.m "didSelectRowAtIndexPath". Если я правильно понял пример, который я адаптировал (в чем я не уверен), он передал массив Book в каждую строку новой таблицы в моем BooksDetailViewController.

Book *aBook = [appDelegate.books objectAtIndex:indexPath.row];

Я пробовал несколько способов воссоздать didSelectRowAtIndexPath, но мне не очень повезло. Ниже у меня закомментирован код примера и мой собственный ужасный угаданный код /sigh.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

     // if(bdvController == nil)
     // bdvController = [[BookDetailViewController alloc] initWithNibName:@"BookDetailView" bundle:[NSBundle mainBundle]];
     // Book *aBook = [appDelegate.books objectAtIndex:indexPath.row];
     // bdvController.aBook = aBook;
     // [self.navigationController pushViewController:bdvController animated:YES];


     NewBookDetailViewController *detailViewController = [[NewBookDetailViewController alloc] initWithNibName:@"NewBookDetailViewController" bundle:nil];
     Book *aBook = appDelegate.books;

     //detailViewController.aBook.title = bookTitle.text;
     //detailViewController.aBook.author = bookAuthor.text;
     //detailViewController.aBook.summary = bookSummary.text;

     [self.navigationController pushViewController:detailViewController animated:YES];
     [detailViewController release];
}

Действительно ли я подключаю проанализированные данные aBook.title к bookTitle (UILabel) в didSelectRowAtIndexPath RootViewController?

or 

Подключать ли их в viewDidLoad в NewBookDetailViewController.m?

bookTitle.text = aBook.title;
bookAuthor.text = aBook.author;
bookSummary.text = aBook.summary;

Как правильно написать didSelectRowAtIndexPath в RootViewController для пользовательского представления вместо табличного?

Пожалуйста, полегче со мной.

  • Кло

person slowman21    schedule 16.09.2010    source источник


Ответы (1)


Целью NewBookDetailViewController является отображение информации об одной книге, да? Таким образом, NewBookDetailViewController потребуется способ сообщить, какую книгу он должен отображать.

Простым способом сделать это было бы добавить свойство к этому классу для хранения ссылки на Book, которое он должен отображать. Вы не хотели бы передавать весь массив книг в контроллер подробного представления. Как он должен знать, какую книгу отображать?

Вот как будет выглядеть моя реализация:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    Book *selectedBook = [appDelegate.books objectAtIndex:indexPath.row];
    NewBookDetailViewController* viewController = [[NewBookDetailViewControlleralloc] initWithNibName:@"NewBookDetailViewController"];
    viewController.book = selectedBook; // "book" is a property you'd add to NewBookDetailViewController

    [self.navigationController pushViewController:viewController animated:YES];
    [viewController release];
}

Вот как вы добавляете свойство book к NewDetailViewController:

Файл .h:

@class Book;
@interface NewDetailViewController : UIViewController {
    // other instance variables
    Book *_book;
}

@property (nonatomic, retain) Book *book;

@end

Файл .m:

#import "NewDetailViewController.h"
#import "Book.h" // assuming the "Book" class is defined in Book.h

@implementation NewDetailViewController

@synthesize book = _book;

- (void)dealloc {
    [_book release];
    [super dealloc];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    // set up your controls to display the book information
}

// other method implementations

@end
person Alex    schedule 16.09.2010
comment
Спасибо Алексей за столь быстрый ответ. Я собираюсь попробовать ваше предложение прямо сейчас. Прежде чем вы ответили, я действительно собирался добавить комментарий... - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { Book *aBook = [appDelegate.books objectAtIndex:indexPath.row]; detailViewController.bookTitle.text = aBook.title; detailViewController.bookAuthor.text = aBook.author; detailViewController.bookSummary.text = aBook.summary; [self.navigationController pushViewController: анимация подробностейViewController: ДА]; [релиз DetailViewController]; } - person slowman21; 16.09.2010