Pengontrol tampilan obrolan siap saji yang elegan untuk aplikasi obrolan iOS yang menggunakan Quickblox communication backend .
#Fitur
Quickblox .
pod 'QMChatViewController'
Seret folder QMChatViewController ke folder proyek Anda dan tautkan ke target yang sesuai.
Instal dependensi.
Contoh termasuk dalam repositori. Cobalah untuk melihat cara kerja pengontrol tampilan obrolan.
Langkah -langkah untuk menambahkan QMChatViewController ke aplikasi Anda:
Buat subkelas QMChatViewController . Anda dapat membuatnya baik dari kode dan antarmuka pembangun.
Buka subkelas Anda dari QMChatViewController dan lakukan yang berikut dalam metode ViewDidload :
self.senderID = 2000 ;
self.senderDisplayName = @" user1 " ;[ self .chatDataSource addMessages: <array of messages>];Menangani pengiriman pesan.
- ( void )didPressSendButton:(UIButton *)button
withMessageText:( NSString *)text
senderId:( NSUInteger )senderId
senderDisplayName:( NSString *)senderDisplayName
date:( NSDate *)date {
// Add sending message - for example:
QBChatMessage *message = [QBChatMessage message ];
message. text = text;
message. senderID = senderId;
QBChatAttachment *attacment = [[QBChatAttachment alloc ] init ];
message. attachments = @[attacment];
[ self .chatDataSource addMessage: message];
[ self finishSendingMessageAnimated: YES ];
// Save message to your cache/memory storage.
// Send message using Quickblox SDK
}Kembalikan kelas tampilan sel khusus untuk pesan obrolan:
- ( Class )viewClassForItem:(QBChatMessage *)item {
// Cell class for message
if (item. senderID != self. senderID ) {
return [QMChatIncomingCell class ];
}
else {
return [QMChatOutgoingCell class ];
}
return nil ;
}
Hitung ukuran sel dan lebar minimum:
- ( CGFloat )collectionView:(QMChatCollectionView *)collectionView minWidthAtIndexPath:( NSIndexPath *)indexPath {
QBChatMessage *item = [ self .chatDataSource messageForIndexPath: indexPath];
NSAttributedString *attributedString = item. senderID == self. senderID ?
[ self bottomLabelAttributedStringForItem: item] : [ self topLabelAttributedStringForItem: item];
CGSize size = [TTTAttributedLabel sizeThatFitsAttributedString: attributedString
withConstraints: CGSizeMake ( 1000 , 10000 )
limitedToNumberOfLines: 1 ];
return size. width ;
}Label atas, bawah dan teks.
- ( NSAttributedString *)attributedStringForItem:(QBChatMessage *)messageItem {
UIColor *textColor = [messageItem senderID ] == self. senderID ?
[UIColor whiteColor ] : [UIColor colorWithWhite: 0.290 alpha: 1.000 ];
UIFont *font = [UIFont fontWithName: @" Helvetica " size: 15 ];
NSDictionary *attributes = @{ NSForegroundColorAttributeName :textColor,
NSFontAttributeName :font};
NSMutableAttributedString *attrStr =
[[ NSMutableAttributedString alloc ] initWithString: messageItem.text
attributes: attributes];
return attrStr;
}
- ( NSAttributedString *)topLabelAttributedStringForItem:(QBChatMessage *)messageItem {
if (messageItem. senderID == self. senderID ) {
return nil ;
}
UIFont *font = [UIFont fontWithName: @" Helvetica " size: 14 ];
UIColor *textColor = [UIColor colorWithRed: 0.184 green: 0.467 blue: 0.733 alpha: 1.000 ];
NSDictionary *attributes = @{ NSForegroundColorAttributeName :textColor,
NSFontAttributeName :font};
NSMutableAttributedString *attrStr =
[[ NSMutableAttributedString alloc ] initWithString: @" nickname "
attributes: attributes];
return attrStr;
}
- ( NSAttributedString *)bottomLabelAttributedStringForItem:(QBChatMessage *)messageItem {
UIFont *font = [UIFont fontWithName: @" Helvetica " size: 12 ];
UIColor *textColor = [messageItem senderID ] == self. senderID ?
[UIColor colorWithWhite: 1.000 alpha: 0.510 ] : [UIColor colorWithWhite: 0.000 alpha: 0.490 ];
NSDictionary *attributes = @{ NSForegroundColorAttributeName :textColor,
NSFontAttributeName :font};
NSString *dateStr = @" 10:20 " ;
NSMutableAttributedString *attrStr =
[[ NSMutableAttributedString alloc ] initWithString: dateStr
attributes: attributes];
return attrStr;
}Memodifikasi koleksi atribut sel obrolan tanpa mengubah kendala:
struct QMChatLayoutModel {
CGSize avatarSize;
CGSize containerSize;
UIEdgeInsets containerInsets;
CGFloat topLabelHeight;
CGFloat bottomLabelHeight;
CGSize staticContainerSize;
CGFloat maxWidthMarginSpace;
};
typedef struct QMChatLayoutModel QMChatCellLayoutModel;Anda dapat memodifikasi atribut ini dalam metode ini:
- (QMChatCellLayoutModel)collectionView:(QMChatCollectionView *)collectionView layoutModelAtIndexPath:( NSIndexPath *)indexPath {
QMChatCellLayoutModel layoutModel = [ super collectionView: collectionView layoutModelAtIndexPath: indexPath];
// Update attributes here ...
return layoutModel;
}Jadi, jika Anda ingin menyembunyikan label atas atau label bawah, Anda hanya perlu mengatur tinggi mereka ke 0.
QMChatViewController mendukung pesan sel lampiran gambar. QMChatAttachmentIncomingCell digunakan untuk lampiran yang masuk, QMChatAttachmentOutgoingCell digunakan untuk lampiran keluar. Keduanya memiliki label kemajuan untuk menampilkan kemajuan pemuatan. XIB juga disertakan.
QMChatViewController berisi manajer sumber data yang disebut QMChatDataSource . Ini memiliki implementasi semua metode, yang Anda butuhkan untuk bekerja dengan QMChatViewController . Kelas ini harus digunakan untuk menambah, memperbarui dan menghapus pesan dari sumber data. QMChatDataSource memiliki delegasi, yang menelepon setiap kali sumber data dimodifikasi.
Untuk informasi lebih lanjut tentang metode dan penggunaannya, periksa dokumen inline kami di QMChatDataSource.h .
Dokumentasi kode inline tersedia.
Lihat lisensi