将IBOutlets连接到UITableViewCell原型

时间:2013-10-11 06:41:20

标签: ios uitableview xcode5

我正在使用自定义UITableViewCell原型创建一个UITable。 我的单元格包含UIImageViews,UILabels和UIButtons。

当我控制并从我的按钮拖动到我的班级界面时,它工作得很好。但是,它不适用于网点。

当我在.h文件中创建IBOutlet时,如果我选择UITable而不是单元格,我只能连接,当然结果是应用程序损坏。

你们有任何想法如何解决这个问题吗?我不想仅为单元格使用自定义类。我真的很想坚持使用Storyboard和原型。

提前致谢

2 个答案:

答案 0 :(得分:10)

使用带有标签的标签将完成工作,但绝不是一个好的做法...最好的方法是创建一个自定义的UITableViewCell类。

即选择

新文件> Cocoa Touch> Objective C Class

和 将其创建为UITableViewCell的子类 现在你将获得.h和.m文件..

下一步是为此

创建单元格视图

选择

新文件>用户界面>空

现在使用您的customcell类的相同名称创建它(假设" CustomCell")

现在你将有三个文件 CustomCell.h,CustomCell.m,CustomCell.xib

现在选择xib文件并在xib上添加UITableViewCell对象并将其自定义类设置为" CustomCell"

看下面的照片 enter image description here

现在在此之后你可以将任何东西(UIImageView,UITextfield,UIButton)拖到下面的视图中,并将出口放到CustomClass上并使用委托方法管理动作。

如果你有imageView出口作为titleImage ..然后你可以通过在CellForRowAtIndex(TableView delgate方法)中创建单元格对象来设置图像来访问它。

cell.titleImage=[UIImage ImageNamed:@"goo.png"]; 

现在我要说的另一件事是你必须在CustomCell.m中实现一个init方法来加载nib>>

它看起来像下面的代码。

    -(id)initWithDelegate:(id)parent reuseIdentifier:(NSString *)reuseIdentifier
    {

        if (self = [self initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier])
        {
            self=(CustomCell*)[[[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil] lastObject];
        }

        self.backgroundColor = [UIColor clearColor];
        self.backgroundView = NULL;
        self.selectedBackgroundView =NULL;

//If you want any delegate methods and if cell have delegate protocol defined
self.delegate=parent;

//return cell
    return self;
    }

现在如果您使用单元格上的按钮,最好有代表

这样在按钮操作方法中你可以调用委托方法(传递单元格对象)并使用TableView在ViewController中实现委托

这是示例

enter image description here

现在你可以使用你的单元格用于UITableView来填充......并且不要在CustomCell.xib中设置reuseIdentifier值(与你设置CustomClass相同)

让我们设置它,嗯还有什么" customCell"

所以在填充tableView时使用

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier=@"customCell";
    CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if(cell==nil)
         cell= [[CustomCell alloc] initWithDelegate:self reuseIdentifier:cellIdentifier];

//set cell properties
   cell.titleImage=[UIImage ImageNamed:@"title.png"];



    return cell;
}

也不要忘记添加委托方法

ViewController:UIViewController<CustomCellDelegate>
在ViewController的ViewController.h文件中

然后在ViewController.m(实现文件)中实现它的主体

作为

-(void)cellButtonPressed:(CustomCell*)cell
{
NSLog(@"Pressed");
}

最好为您的单元格提供索引属性以处理您的表格选择取消选择方法

提供

@property int index;
在CustomCell.h中

以及

添加

cell.index=indexPath.row;

在你的tableView cellAtRow委托......

这看起来像一个很长的方法,但它安静有用且可读......

<强> ------- NB ----------:

如果您有任何对齐问题,只需返回CustomCell高度即可 通过实施

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{}

可能会发生......

答案 1 :(得分:4)

你必须为单元格创建一个自定义的UITableViewCell类,然后只有cntrl +拖动来创建出口是有意义的,否则有一个更简单的方法。有99343,99345(以避免重叠)的标签到您的UIImageViews,UILabels等,并访问它们

  UILabel *myLabelFromPrototypeCell = (UILabel*)[cell.contentView viewWithTag:99343];