Создайте пользовательский UIView в качестве tableHeaderView программно - PullRequest
1 голос
/ 07 ноября 2010

Я хочу создать «детальный вид» в моем приложении на основе навигации, аналогичном приложению адресной книги.

Я хочу создать UIView, который имеет UIImageView и UILabel, который я могу передать свойству tableHeaderView UITableVIew при нажатии контроллером навигации. Текст метки и изображение должны брать информацию из контекста управляемого объекта при загрузке.

Я начал пытаться сделать это с помощью IB, но сыт по горло, когда текст метки не обновится, независимо от того, куда я положил myView.UILabel.text = @"some new text". Он просто продолжал представлять текст, который я ввел в окне инспектора IB.

Итак, без использования IB, как бы мне создать UIView с UILabel и UIImageView в нем?

Должен ли я создавать новый класс, который является подклассом UIViewController или просто UIView?

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

Где в коде должен быть указан URL-адрес текста и изображения? (viewDidLoad или loadView или viewWillLoad) (UIView, UIViewController, detailViewController)?

1 Ответ

1 голос
/ 07 ноября 2010

Если вы начали использовать IB, а текст UILabel не обновлялся, похоже, что IBOutlet вашего контроллера представления неправильно подключен к метке в IB.

Надеюсь, это решит вашу проблему с использованиемтам жеИ в коде viewController вы должны обновить этот текст в viewDidLoad.

Но если вы хотите сделать это программно, я бы сделал подкласс UIView (не UIViewController).

И я быпереопределите initWithFrame и выполните все настройки там.

Что-то вроде следующего:

myView.m

@implementation myView

@synthesize imageView, myLabel;

- (id) initWithFrame:(CGRect) frame
{
    if (self = [super initWithFrame:frame]) {

        // Setup your image view and add it to the view.
        self.imageView = [[[UIImageView alloc] initWithFrame:initWithFrame:frame] autorelease];
        self.imageView.image = ...
        [self addSubview:self.imageView];

        // Setup your label
        self.myLabel = [[[UILabel alloc] initWithFrame:frame] autorelease];
        self.myLabel.text = @"whatever you like";
        [self addSubview:self.myLabel];
    }
    return self;
}

Убедитесь, что память очищена правильно в методе deallocКонечно, в зависимости от того, хотите ли вы сделать свойства класса против переменных класса.

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