在自定义UITableViewCell中作为IBOutlet链接时,自定义UIButton会消失

时间:2013-07-19 09:08:56

标签: ios iphone objective-c ipad

我创建了一个名为SellerMobileTableViewCell的自定义表格视图单元格,它显示卖家的手机号码作为标签,以及短信和呼叫圆形矩形按钮:

SellerMobileTableViewCell

单元格没有自己的XIB文件 - 它是UITableView中的原型单元格,自定义类设置为SellerMobileTableViewCellSellerMobileTableViewCell包含IBOutlet类型为ContactButton的两个按钮。在界面构建器中,我还将按钮设置为ContactButton作为其自定义类。

#import <UIKit/UIKit.h>
#import "ContactButton.h"

@interface SellerMobileTableViewCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UILabel *numberLabel;
@property (weak, nonatomic) IBOutlet ContactButton *SMSButton;
@property (weak, nonatomic) IBOutlet ContactButton *callButton;

@end

问题在于:当我没有通过Ctrl-Click将它们连接到SellerMobileTableViewCell.h并拖动到IBOutlet时,应用程序中会出现两个自定义按钮。但是,当我这样做时,我应该这样做,但它们根本就没有出现。

我不明白为什么会这样。帮助

2 个答案:

答案 0 :(得分:0)

您是否在XIB文件中设置了UITableView委托和dataSource以及头文件中的协议?

 @interface MerchantListController : UITableViewController <UITableViewDelegate, UITableViewDataSource>

enter image description here

您是否也设置了小区标识符?

enter image description here

您还需要设置UITableView

的委托方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.merchantList count];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSString *cellIdentifier = @"MerchantListCell";
    MerchantListCell    *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];


    if (cell == nil)
    {
         cell = [[[MerchantListCell alloc] initWithStyle:UITableViewStylePlain reuseIdentifier:CellIdentifier] autorelease];    
    }


    // initialize cell data here


    return cell;
}

答案 1 :(得分:0)

我个人觉得这并不算是一个“好”的StackOverflow答案,但它现在有效,而且我没有做太多不同的事情。

首先,我试图接受Vin的建议。即使我没有将IBOutlet隐藏在我的文件中的任何位置,我决定将其设置为NO SellerMobileTableViewCell.m只是为了安全:

#import "SellerMobileTableViewCell.h"

@implementation SellerMobileTableViewCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    self.SMSButton.hidden = NO;
    return self;
}

// ...

@end

然后我还删除了在SellerMobileTableViewCell.m中自动创建的以下方法:

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

但是,我再次移除了行self.SMSButton.hidden = NO并放回了setSelected:方法,它仍然有效。简而言之,我把所有东西都放回原处。我真的不明白这个错误。

这可能是一个Xcode错误吗?自从我添加自定义图像后,我首次体验到了奇怪的事情,我将其设置为自定义按钮的背景。我有CopyPNGFile Error s,如果你是谷歌,它是最奇怪的Xcode错误之一,可以通过将PNG文件保存为非隔行扫描来解决。但是,我刚刚在问题导航器中丢失了该错误,而没有对图像本身做任何事情 - 我只是删除并重新添加文件。