具有不同子视图的自定义CollectionViewCell?

时间:2016-03-23 11:45:46

标签: ios objective-c uicollectionview uicontainerview uicollectionreusableview

我正在创建一个名为MessageCell的自定义collectionViewCell。此消息单元格包含三个组件:headerLabelmessageContainerViewfooterLabel。问题是,根据消息的类型(视频,交易,交付确认,照片,文本等),我想显示具有特定操作等的特定类型的视图。

enter image description here

实现这一目标的最佳方法是什么?我已经尝试将我的容器视图设置为我的单元子类中的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;
        }
    }
}

非常感谢任何帮助。

1 个答案:

答案 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以满足您的需求。另外,不要忘记相应地设置可重用的标识符。