XML проанализировал данные в пользовательском представлении с помощью UILabel вместо UITableView - PullRequest
1 голос
/ 16 сентября 2010

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

У меня есть эти Книги, проанализированные из файла 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?

или

Должен ли я подключить их в viewDidLoad в NewBookDetailViewController.m?

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

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

Пожалуйста, успокойся на мне.

  • Кло

1 Ответ

0 голосов
/ 16 сентября 2010

Цель 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...