Arhn - архитектура программирования

Текст UILabel не меняется, однако xx.title работает

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

У меня есть код ниже.

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

    // PropDetailViewController is second view controller
    PropDetailViewController *prop = [self.storyboard instantiateViewControllerWithIdentifier:@"prop"];

    ListOfProperty *propList = [propListFinal objectAtIndex:indexPath.row];

    NSString *myText = [NSString stringWithFormat:@"%@", propList.addressOfFlat];
    prop.detailLabel.text = myText;
    prop.title  = myText;

    [self.navigationController pushViewController:prop animated:YES];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

а в PropDetailViewController у меня @property (retain, nonatomic) IBOutlet UILabel *detailLabel;.

Я ожидал, что когда я нажму, скажем, Name 1, я увижу Name 1 как текст в UILabel и на UINavigationBar. Однако я вижу только Name 1 на панели навигации, а не на UILabel.


  • На днях была аналогичная проблема, но я ее не нашел. Однако, если я не найду его, я попробую ответить. 21.01.2013
  • Если это не сработает, почему бы вам не попробовать detailLabel.text = title в PropDetailViewController! 21.01.2013
  • @Dpk: это отличная сделка, но на самом деле я не хотел показывать заголовок. В заголовке у меня будет статический текст в качестве имен 21.01.2013
  • UILabel еще не загружен, а до этого вы устанавливаете текст. Вот почему он не появляется. см. мой ответ ниже. 21.01.2013
  • @NeelamVerma, он уже передает текст через заголовок, так какой смысл использовать другую строку в соответствии с вашим ответом? 21.01.2013
  • @Dpk: хорошо, согласно требованию, он может сделать [self.detailLabel setText:self.title]; это также будет работать. 21.01.2013

Ответы:


1

Не рекомендуется обращаться к элементу UIView в этот момент выполнения программы. При установке значения prop.detailLabel.text представление могло не быть загружено. Когда представление загружается позже, UIView обновляется настройками по умолчанию, заданными в файле XIB в IB.

Вам лучше установить свойство NSString, скажем

@property (retain, nonatomic) NSString *propName;

назначьте его, прежде чем нажимать контроллер представления, как вы это делаете. Но используйте это свойство, а не UILable. А в PropDetailViewController в viewDidLoad делаем следующее:

(void) viewDidLoad {
  // call super viewDidLoad and all the works ...

  self.detailLabel.text = propName;

} 

Вместо viewDidLoad вы можете использовать viewWillAppear. Потому что viewDidLoad МОЖЕТ быть выполнен уже, когда вы присваиваете значение свойства.

Если вы хотите быть на стороне сохранения, придумайте новый метод инициализации, в котором вы передаете все значения, которые хотите установить заранее. Но я никогда не делал этого в сочетании с раскадровкой (где вы можете использовать instanceiate... вместо init...), и поэтому я не могу дать какой-либо совет из головы.

Другим чистым подходом было бы придерживаться свойства propName, но реализовать собственный установщик -(void)setPropName:(NSString)propName;, где вы устанавливаете свойство (возможно, _propName, если вы выполняете автосинтез) И устанавливаете текст UILable, а также устанавливаете текст UILable в viewDidLoad.

21.01.2013

2

Попробуйте это: в .h

@property (retain, nonatomic) NSString *detailText;

in PropDetailViewController.m

Изменить строку кода с помощью

 NSString *myText = [NSString stringWithFormat:@"%@", propList.addressOfFlat];
    prop.detailText = myText;
    prop.title  = myText;

в ViewDidLoad:

[self.detailLabel setText:self.detailText];
21.01.2013
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..