将IBOutlets连接到UITableViewCell原型

Cam*_*mus 4 uitableview ios xcode5

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

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

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

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

提前致谢

Rao*_*aon 10

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

即,选择

新文件> Cocoa Touch> Objective C Class

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

下一步是为此创建单元格视图

选择

新文件>用户界面>清空

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

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

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

看下面的图片 在此输入图像描述

在此之后,您可以将任何内容(UIImageView,UITextfield,UIButton)拖到下面的视图中,并将出口放到CustomClass上,并使用委托方法管理操作.

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

cell.titleImage=[UIImage ImageNamed:@"goo.png"]; 
Run Code Online (Sandbox Code Playgroud)

现在我要说的另一件事是你必须在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;
    }
Run Code Online (Sandbox Code Playgroud)

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

因此,在按钮操作方法中,您可以调用委托方法(传递单元对象)并使用TableView在ViewController中实现委托

这是一个例子

在此输入图像描述

现在你可以使用你的单元格用于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;
}
Run Code Online (Sandbox Code Playgroud)

也不要忘记添加委托方法

ViewController:UIViewController<CustomCellDelegate>
Run Code Online (Sandbox Code Playgroud)

在ViewController的ViewController.h文件中

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

-(void)cellButtonPressed:(CustomCell*)cell
{
NSLog(@"Pressed");
}
Run Code Online (Sandbox Code Playgroud)

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

提供

@property int index;
Run Code Online (Sandbox Code Playgroud)

在CustomCell.h中

并且

cell.index=indexPath.row;
Run Code Online (Sandbox Code Playgroud)

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

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

------- NB ----------:

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

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{}
Run Code Online (Sandbox Code Playgroud)

它可能会发生....