以编程方式将自定义UIView创建为tableHeaderView

时间:2010-11-07 18:02:48

标签: iphone header uiviewcontroller view uinavigationcontroller

我想在基于导航的应用中创建一个类似于地址簿应用的“详细视图”。

我想创建一个UIView,其UIImageViewUILabel可以在导航控制器推送时传递给UITableVIew的tableHeaderView属性。标签文本和图像必须在加载时从托管对象上下文中获取信息。

我开始尝试使用IB执行此操作,但是当标签文本无法更新时,无论我放置myView.UILabel.text = @"some new text"的位置,都会厌倦。它只是一直显示我在IB检查员窗口中输入的文本。

因此,如果不使用IB,我将如何创建其中包含UIViewUILabel的{​​{1}}?

我应该创建一个属于UIImageViewUIViewController的子类的新类吗?

如何创建标签和图像的子视图?

在代码中应该在哪里设置文本和图片网址? (viewDidLoad或loadView或viewWillLoad)(UIView,UIViewController,detailViewController)?

1 个答案:

答案 0 :(得分:1)

如果您开始使用IB并且UILabel文本无法更新,则视觉控制器的IBOutlet声音未正确连接到IB中的标签。

希望这可以解决您使用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方法中正确清理内存,具体取决于你是否喜欢make class properties vs class variables。