Не удается подключить IBOutlets для пользовательского UITableViewCell - PullRequest
4 голосов
/ 22 июня 2011

У меня проблема при попытке создать настраиваемую ячейку таблицы для моего приложения для iPhone в Xcode 4. Я создал файлы .h и .m, создал IBOutlets для всех подпредставлений, которые должны присутствовать внутри ячейки.и перетащил фактические элементы управления в файл XIB ячейки в Интерфейсном Разработчике.Однако я не могу понять, как подключить розетки к элементам управления IB.В каждом учебном пособии, которое я читаю, говорится, что нужно перетаскивать элементы управления из объекта TableViewCell в списке объектов в подпредставления, но при этом мои IBOutlets не отображаются во всплывающем окне.Единственные доступные выходы - это «acccessoryView», «backgroundView», «editAccessoryView» и «backgroundSelectedView».Не должен ли я также увидеть свои собственные IBOutlets в этом списке?Или я не следую правильной процедуре?(Я довольно новичок в разработке для iPhone).

Вот код, который я использую для пользовательского класса ячеек:

.h:

//
//  RecommendationCell.h
//  Tuneplug
//
//  Created by Bill Labus on 6/21/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import <UIKit/UIKit.h>


@interface RecommendationCell : UITableViewCell {
    UIImageView *artwork;
}

@property (nonatomic, retain) UIImageView *artwork;

@end

.m:

//
//  RecommendationCell.m
//  Tuneplug
//
//  Created by Bill Labus on 6/21/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import "RecommendationCell.h"

@implementation RecommendationCell

@synthesize artwork;


- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

- (void)dealloc
{
    [super dealloc];
}

@end

(Обратите внимание, что пока я сократил подпредставления до вида изображения 'artwork', чтобы упростить его выяснение).Спасибо за любую помощь!

Ответы [ 3 ]

7 голосов
/ 22 июня 2011

Если я не понимаю:

Попробуйте добавить тег IBOutlet.

IBOutlet UIImageView *artwork;

и

@property (nonatomic, retain) IBOutlet UIImageView *artwork;

Этот тег является #define в Xcode, который говорит Interface Builder распознавать ваш код.

2 голосов
/ 22 июня 2011

Вы должны установить идентификатор класса ячейки табличного представления в Интерфейсном Разработчике для своего пользовательского класса, даже если файл .xib назван так же, как ваш пользовательский класс, вам все равно нужно явно указать, что Владелец Файла является объектом типа РекомендацииCell.

Другая проблема (упомянутая Патриком) заключается в том, что вы должны объявить IBOutlet в вашем .h в объявлении @property, а не в переменной экземпляра, например:

UIImageView *artwork;

@property (nonatomic, retain) IBOutlet UIImageView *artwork;
0 голосов
/ 02 декабря 2015

Хотел обновить, так как наткнулся на это недавно. В xcode 7.1.1 вы не можете перетаскивать от владельца файла, как это обычно делается для UIViewController xib's.

Перейдите к файлу .xib для пользовательского UITableViewCell в конструкторе интерфейсов.

enter image description here

Это трудно объяснить, поэтому я включил изображение, даже не смотря на это, я не уверен, что действительно хорошо объясняю это, но, надеюсь, это поможет. Или, по крайней мере, если я столкнусь с этим снова, я пойму, о чем говорю.

Щелкните правой кнопкой мыши на пользовательской ячейке uitableview, содержащей ваши UILabels или UIImage и т. Д.

Откроется меню со списком всех ваших IBOutlets и объектов, содержащихся в вашей пользовательской ячейке uitableviewcell. Наведите указатель мыши на пустой круг справа и удерживайте клавишу Ctrl, щелкнув и перетащив на объект.

...