我正在使用自定义UITableViewCell原型创建一个UITable。 我的单元格包含UIImageViews,UILabels和UIButtons。
当我控制并从我的按钮拖动到我的班级界面时,它工作得很好。但是,它不适用于网点。
当我在.h文件中创建IBOutlet时,如果我选择UITable而不是单元格,我只能连接,当然结果是应用程序损坏。
你们有任何想法如何解决这个问题吗?我不想仅为单元格使用自定义类。我真的很想坚持使用Storyboard和原型。
提前致谢
答案 0 :(得分: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"];
现在我要说的另一件事是你必须在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中实现委托
这是示例
现在你可以使用你的单元格用于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];