2009-03-30 4 views
0

У меня есть табличный вид, показывающий список банковских транзакций. Когда я нажимаю один, я бы хотел показать диалог редактирования, инициализированный текущими данными. Я делаю что-то вроде этого в настоящее время, чтобы получить контроллер и инициализировать текстовые поля на его взгляд:Как инициализировать представление при использовании контроллера навигации

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    TransactionDetailViewController *transactionDetailViewController; 
    transactionDetailViewController = [[TransactionDetailViewController alloc] initWithNibName:@"TransactionDetailViewController" bundle:nil]; 

    // round up data 
    NSMutableDictionary *rowDict = (NSMutableDictionary *)[transactions objectAtIndex:indexPath.row]; 

    transactionDetailViewController.amountField.text = [rowDict objectForKey:@"amount"]; 
    transactionDetailViewController.nameField.text = [rowDict objectForKey:@"name"]; 
    transactionDetailViewController.datePicker.date = [rowDict objectForKey:@"date"]; 

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

К сожалению, это не работает, потому что amountField, nameField и Datepicker не были инициализированы на данный момент - они равны 0x00 и, как результат, передаются, когда я пытаюсь установить их текст или значения даты. Они получают правильную инициализацию по времени, вызываемому вызовом viewDidLoad. Должен ли я хранить строку, выбранную в родительском контроллере, а затем переходить к файловому владельцу из подробного представления или есть способ, которым я могу фактически инициализировать представление детали одновременно и место, которое я создаю?

ответ

2

У вас есть 2 варианта:

  1. переопределять метод init в TransactionDetailViewController и инициализировать подвидов там

  2. NSDictionary Пропустите к TransactionDetailViewController и сделать инициализацию в viewDidLoad.

Обычно я совмещаю два метода.

Если ваше представление не сложно (и вам действительно не нужно использовать файл NIB), вы можете создать свой вид в init.

С другой стороны, передача NSDictionary в представление может облегчить вам получение возвращаемых значений.

Таким образом, в вашем случае, я бы, вероятно, добавить NSDictionary свойство TransactionDetailViewController и сделать

[transactionDetailViewController setTransaction:rowDict] 

Тогда в viewDidLoad, я бы инициализировать значения в подвидов.

+0

Хорошая сделка! Я некоторое время окунался с ним и понял Вариант №2, который казался хорошим чистым способом сделать это. Спасибо за направление! –

+0

Добро пожаловать. знак равно –

Смежные вопросы