我正在创建一个名为MessageCell
的自定义collectionViewCell。此消息单元格包含三个组件:headerLabel
,messageContainerView
和footerLabel
。问题是,根据消息的类型(视频,交易,交付确认,照片,文本等),我想显示具有特定操作等的特定类型的视图。
实现这一目标的最佳方法是什么?我已经尝试将我的容器视图设置为我的单元子类中的UIView
,并根据消息类型将其设置为等于特定子视图,但这不起作用:
- (void)setMessage:(EMKMessage *)message {
//Set Message
_message = message;
//Check Message Type
switch (message.type) {
case MessageTypeText:
default: {
//Create Message Content View
TextContentView *textContentView = [[TextContentView alloc] initForAutoLayout];
textContentView.frame = CGRectMake(0, 0, 300, 200);
[textContentView setText:message.text];
self.messageContainerView = textContentView;
break;
}
}
}
非常感谢任何帮助。
答案 0 :(得分:0)
您可以单独创建所需的所有单元格。在
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath
您可以根据需要租用不同的单元格。只需检查要在indexPath
处表示的对象类型,然后返回相应的单元格。如果您需要与它们交互,或者您可以使用块属性,那些单元格可以具有委托。类似的东西:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 0) {
VideoMessageCell *cell = [tableView.dequeueReusableCellWithIdentifier:@"VideoMessageCell"];
//set the cell properties
return cell;
} else if (indexPath.row == 1) {
AudioMessageCell *cell = [tableView.dequeueReusableCellWithIdentifier:@"AudioMessageCell"];
//set the cell properties
return cell;
}
}
现在,我不知道您如何确定给定索引所需的单元格类型,但您可以替换indexPath.row
以满足您的需求。另外,不要忘记相应地设置可重用的标识符。