0

というカスタム collectionViewCell を作成していますMessageCell。このメッセージ セルには、headerLabelmessageContainerView、およびの 3 つのコンポーネントがあり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;
        }
    }
}

どんな助けでも大歓迎です。

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 に答える