0

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

在此处输入图像描述

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

任何帮助将不胜感激。

4

1 回答 1

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根据需要进行替换。也不要忘记相应地设置可重用的标识符。

于 2016-03-23T11:53:07.673 回答