我正在创建一个带有自定义 UITableViewCell 原型(prototype)的 UITable。
我的单元格包含 UIImageViews、UILabels 和 UIButtons。
当我控制并从我的按钮拖动到我的类(class)界面时,它工作得很好。但是,它不适用于 socket 。
当我在 .h 文件中创建 IBOutlet 时,如果我选择 UITable 而不是单元格,我只能连接,当然结果是一个损坏的应用程序。
你们知道如何解决这个问题吗?我不想只为单元格使用自定义类。我真的很想坚持使用 Storyboard 和原型(prototype)。
提前致谢
最佳答案
使用带有标签的标签将完成工作,但绝不是一个好的做法......最好的方法是创建一个 UITableViewCell 的自定义类。
即,选择
新建文件>Cocoa Touch >Objective C 类
和
将其创建为 UITableViewCell 的子类
现在您将获得 .h 和 .m 文件..
下一步是为此创建单元格的 View
选择
新文件 > 用户界面 > 空
现在用您的自定义单元类的相同名称创建它(让我们说“CustomCell”)
现在您将拥有三个文件 CustomCell.h,CustomCell.m,CustomCell.xib
现在选择xib文件并在xib上添加UITableViewCell对象并将其自定义类设置为“CustomCell”
看下图
现在,在此之后,您可以将任何内容(UIImageView、UITextfield、UIButton)拖到下面的 View 中,并将 socket 提供给 CustomClass 并使用委托(delegate)方法管理操作..
如果你有 imageView outlet 作为 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;
}
现在如果你在你的手机上使用按钮,最好有代表以便在按钮操作方法中您可以调用委托(delegate)方法(传递单元格对象)并使用 TableView 在您的 ViewController 中实现委托(delegate)
这是例子
现在您可以使用您的单元格为 UITableView 填充...并且不要在 CustomCell.xib 中设置重用标识符值(与设置 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;
}
也不要忘记添加委托(delegate)方法给
ViewController:UIViewController<CustomCellDelegate>
在 ViewController 的 ViewController.h 文件上然后在你的 ViewController.m(实现文件)中实现它的主体
作为
-(void)cellButtonPressed:(CustomCell*)cell
{
NSIndexPath *indexPathOfPressedCell = [self.tableView indexPathForCell:cell];
NSLog(@"Pressed");
}
这看起来像一个很长的方法,但它非常有用和可读......-------NB---------:
此外,返回 CustomCell 高度
通过实现
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{}
可能会发生....关于ios - 将 IBOutlets 连接到 UITableViewCell 原型(prototype),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19311807/