Название Subview не отображается должным образом при использовании раскадровки - PullRequest
1 голос
/ 06 декабря 2011

У меня есть таблица и подробный вид, связанные с segues. Я хочу, чтобы заголовок подробного вида был заголовком выбранной ячейки.

Если я использую этот код в GradeDetail.m, он работает, но статичен, конечно:

self.navigationController.title = @"Title goes here";

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

self.navigationItem.title = grade.fag;

У меня есть класс Grade, импортируемый в случае необходимости, и «fag» (означает «школьный предмет» на датском языке, а не для геев) свойство, определенное в классе.

Вот фрагмент кода из таблицы:

...
- (id)initWithCoder:(NSCoder *)aDecoder
{
if ((self = [super initWithCoder:aDecoder])) 
{
    grades = [[NSMutableArray alloc] init];

    Grade* grade = [[Grade alloc] init];
    grade.fag = @"Dansk";
    grade.mundtlig = @"7";
    [grades addObject:grade];

...    

}
return self;
}

И код, выдвигающий подробный вид:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath     *)indexPath
{    
 GradeDetail *detailViewController = [[GradeDetail alloc] init];

Grade* grade = [self.grades objectAtIndex:indexPath.row];
detailViewController.grade = grade;

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

Обратите внимание на приведенный выше код, что я прокомментировал:

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

Если я удаляю переход в раскадровке и вместо этого использую эту строку кода, в подробном представлении отображается правильный заголовок, но представление загружается неправильно. (Чтение: я не хочу использовать эту строку кода, я хочу, чтобы она работала в раскадровке.)

Скажите, пожалуйста, хотите ли вы увидеть больше кода или прояснить некоторые из вышеперечисленных.

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Вам нужно будет переопределить -prepareForSegue:sender:, чтобы подключить контроллер входящего представления и установить все необходимые свойства. Вам также необходимо указать идентификаторы segue в раскадровке.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"ShowGradeDetails"])
    {
        GradeDetail *detailViewController = (GradeDetail *)segue.destinationViewController;
        NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
        Grade *selectedGrade = [self.grades objectAtIndex:selectedIndexPath.row];
        detailViewController.grade = selectedGrade;
    }
}
0 голосов
/ 06 декабря 2011

Возможно попробуйте установить заголовок viewController: self.title = grade.fag;

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