Files
featherVoice/TUIKit/TUIContact/UI_Minimalist/UI/TUIFriendRequestViewController_Minimalist.m
2025-08-08 10:49:36 +08:00

329 lines
14 KiB
Objective-C

//
// TUIFriendRequestViewController.m
// TUIKitDemo
//
// Created by annidyfeng on 2019/4/18.
// Copyright © 2019 kennethmiao. All rights reserved.
//
#import "TUIFriendRequestViewController_Minimalist.h"
#import <TIMCommon/TIMCommonModel.h>
#import <TIMCommon/TIMDefine.h>
#import <TUICore/TUIThemeManager.h>
#import <TUICore/UIView+TUILayout.h>
#import "TUICommonContactProfileCardCell.h"
#import "TUICommonContactSwitchCell.h"
#import "TUIContactAvatarViewController_Minimalist.h"
#import "TUIContactButtonCell_Minimalist.h"
#import <TUICore/UIView+TUIToast.h>
@interface TUIFriendRequestViewController_Minimalist () <UITableViewDataSource, UITableViewDelegate>
@property UITableView *tableView;
@property UITextView *addWordTextView;
@property UITextField *nickTextField;
@property BOOL keyboardShown;
@property TUICommonContactProfileCardCellData *cardCellData;
@property TUICommonContactSwitchCellData *singleSwitchData;
@property(nonatomic, strong) TUINaviBarIndicatorView *titleView;
@end
@implementation TUIFriendRequestViewController_Minimalist
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
[self.view addSubview:self.tableView];
self.tableView.frame = self.view.frame;
self.tableView.delegate = self;
self.tableView.dataSource = self;
[self.tableView setSeparatorInset:UIEdgeInsetsMake(0, 0, 0, 0)];
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.backgroundColor = [UIColor whiteColor];
if (@available(iOS 15.0, *)) {
self.tableView.sectionHeaderTopPadding = 0;
}
self.addWordTextView = [[UITextView alloc] initWithFrame:CGRectZero];
self.addWordTextView.font = [UIFont systemFontOfSize:14];
self.addWordTextView.backgroundColor = [UIColor tui_colorWithHex:@"f9f9f9"];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineSpacing = 5;
paragraphStyle.firstLineHeadIndent = kScale390(12.5);
paragraphStyle.alignment = NSTextAlignmentLeft;
if (isRTL()) {
paragraphStyle.alignment = NSTextAlignmentRight;
}
else {
paragraphStyle.alignment = NSTextAlignmentLeft;
}
NSDictionary *attributes = @{NSFontAttributeName : [UIFont systemFontOfSize:kScale390(16)], NSParagraphStyleAttributeName : paragraphStyle};
NSString *selfUserID = [[V2TIMManager sharedInstance] getLoginUser];
[[V2TIMManager sharedInstance] getUsersInfo:@[ selfUserID ]
succ:^(NSArray<V2TIMUserFullInfo *> *infoList) {
if (infoList && infoList.count > 0) {
V2TIMUserFullInfo *userInfo = [infoList firstObject];
if (userInfo) {
NSString *text = [NSString stringWithFormat:TIMCommonLocalizableString(FriendRequestFormat),
userInfo.nickName ? userInfo.nickName : userInfo.userID];
self.addWordTextView.attributedText = [[NSAttributedString alloc] initWithString:text
attributes:attributes];
}
}
}
fail:^(int code, NSString *desc){
}];
self.nickTextField = [[UITextField alloc] initWithFrame:CGRectZero];
if (isRTL()) {
self.nickTextField.textAlignment = NSTextAlignmentLeft;
}
else {
self.nickTextField.textAlignment = NSTextAlignmentRight;
}
_titleView = [[TUINaviBarIndicatorView alloc] init];
[_titleView setTitle:TIMCommonLocalizableString(FriendRequestFillInfo)];
self.navigationItem.titleView = _titleView;
self.navigationItem.title = @"";
TUICommonContactProfileCardCellData *data = [TUICommonContactProfileCardCellData new];
data.name = [self.profile showName];
data.genderString = [self.profile showGender];
data.identifier = self.profile.userID;
data.signature = [self.profile showSignature];
data.avatarImage = DefaultAvatarImage;
data.avatarUrl = [NSURL URLWithString:self.profile.faceURL];
data.showSignature = YES;
self.cardCellData = data;
self.singleSwitchData = [TUICommonContactSwitchCellData new];
self.singleSwitchData.title = TIMCommonLocalizableString(FriendOneWay);
@weakify(self);
[[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillShowNotification object:nil] filter:^BOOL(NSNotification *value) {
@strongify(self);
return !self.keyboardShown;
}] subscribeNext:^(NSNotification *x) {
@strongify(self);
self.keyboardShown = YES;
[self adjustContentOffsetDuringKeyboardAppear:YES withNotification:x];
}];
[[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillHideNotification object:nil] filter:^BOOL(NSNotification *value) {
@strongify(self);
return self.keyboardShown;
}] subscribeNext:^(NSNotification *x) {
@strongify(self);
self.keyboardShown = NO;
[self adjustContentOffsetDuringKeyboardAppear:NO withNotification:x];
}];
}
#pragma mark - Keyboard
- (void)adjustContentOffsetDuringKeyboardAppear:(BOOL)appear withNotification:(NSNotification *)notification {
NSTimeInterval duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
UIViewAnimationCurve curve = [notification.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue];
CGRect keyboardEndFrame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
CGFloat keyboardHeight = CGRectGetHeight(keyboardEndFrame);
CGSize contentSize = self.tableView.contentSize;
contentSize.height += appear ? -keyboardHeight : keyboardHeight;
[UIView animateWithDuration:duration
delay:0
options:UIViewAnimationOptionBeginFromCurrentState | curve
animations:^{
self.tableView.contentSize = contentSize;
[self.view layoutIfNeeded];
}
completion:nil];
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
if (indexPath.section == 0) {
return [self.cardCellData heightOfWidth:Screen_Width];
}
if (indexPath.section == 1) {
return 120;
}
return 44;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 4;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
UILabel *label = [[UILabel alloc] init];
label.textColor = [UIColor tui_colorWithHex:@"#000000"];
label.font = [UIFont systemFontOfSize:14.0];
if (section == 1) {
label.text = [NSString stringWithFormat:@" %@", TIMCommonLocalizableString(please_fill_in_verification_information)];
} else if (section == 2) {
label.text = [NSString stringWithFormat:@" %@", TIMCommonLocalizableString(please_fill_in_remarks_group_info)];
}
return label;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return section == 0 ? 0 : 38;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.section == 0) {
TUICommonContactProfileCardCell *cell = [[TUICommonContactProfileCardCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"TPersonalCommonCell_ReuseId"];
cell.delegate = self;
[cell fillWithData:self.cardCellData];
return cell;
} else if (indexPath.section == 1) {
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"AddWord"];
[cell.contentView addSubview:self.addWordTextView];
self.addWordTextView.mm_width(Screen_Width).mm_height(120);
return cell;
} else if (indexPath.section == 2) {
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"NickName"];
cell.textLabel.text = TIMCommonLocalizableString(Alia);
[cell.contentView addSubview:self.nickTextField];
UIView *separtor = [[UIView alloc] init];
separtor.backgroundColor = [UIColor groupTableViewBackgroundColor];
[cell.contentView addSubview:separtor];
separtor.mm_width(tableView.mm_w).mm_bottom(0).mm_left(0).mm_height(1);
self.nickTextField.mm_width(cell.contentView.mm_w / 2).mm_height(cell.contentView.mm_h).mm_right(20);
self.nickTextField.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
return cell;
} else if (indexPath.section == 3) {
TUIContactButtonCell_Minimalist *cell = [[TUIContactButtonCell_Minimalist alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"send"];
TUIContactButtonCellData_Minimalist *data = [[TUIContactButtonCellData_Minimalist alloc] init];
data.style = ButtonBule;
data.title = TIMCommonLocalizableString(Send);
data.cselector = @selector(onSend);
data.textColor =
TIMCommonDynamicColor(@"primary_theme_color", @"147AFF"); //[UIColor colorWithRed:20/255.0 green:122/255.0 blue:255/255.0 alpha:1/1.0];
[cell fillWithData:data];
return cell;
}
return nil;
}
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
return NO;
}
- (void)onSend {
[self.view endEditing:YES];
// display toast with an activity spinner
[TUITool makeToastActivity];
V2TIMFriendAddApplication *application = [[V2TIMFriendAddApplication alloc] init];
application.addWording = self.addWordTextView.text;
application.friendRemark = self.nickTextField.text;
application.userID = self.profile.userID;
application.addSource = @"iOS";
if (self.singleSwitchData.on) {
application.addType = V2TIM_FRIEND_TYPE_SINGLE;
} else {
application.addType = V2TIM_FRIEND_TYPE_BOTH;
}
[[V2TIMManager sharedInstance] addFriend:application
succ:^(V2TIMFriendOperationResult *result) {
NSString *msg = nil;
BOOL isSuccessFlag = NO;
if (ERR_SUCC == result.resultCode) {
msg = TIMCommonLocalizableString(FriendAddResultSuccess);
isSuccessFlag = YES;
} else if (ERR_SVR_FRIENDSHIP_INVALID_PARAMETERS == result.resultCode) {
if ([result.resultInfo isEqualToString:@"Err_SNS_FriendAdd_Friend_Exist"]) {
msg = TIMCommonLocalizableString(FriendAddResultExists);
}
} else {
if (result.resultCode == ERR_SVR_FRIENDSHIP_ALLOW_TYPE_NEED_CONFIRM) {
isSuccessFlag = YES;
}
msg = [TUITool convertIMError:result.resultCode msg:result.resultInfo];
}
if (msg.length == 0) {
msg = [NSString stringWithFormat:@"%ld", (long)result.resultCode];
}
[TUITool hideToastActivity];
[self showHud:isSuccessFlag msgText:msg];
}
fail:^(int code, NSString *desc) {
[TUITool hideToastActivity];
[TUITool makeToastError:code msg:desc];
}];
}
- (void)showHud:(BOOL)isSuccess msgText:(NSString *)msgText {
UIView *hudView = [[UIView alloc] init];
hudView.frame = CGRectMake(0, 0, Screen_Width, Screen_Height);
hudView.backgroundColor = [UIColor tui_colorWithHex:@"#000000" alpha:0.6];
UIView *msgView = [[UIView alloc] init];
[hudView addSubview:msgView];
msgView.layer.masksToBounds = YES;
msgView.layer.cornerRadius = kScale390(10);
msgView.backgroundColor = [UIColor tui_colorWithHex:@"FFFFFF"];
UIImageView *icon = [[UIImageView alloc] init];
[msgView addSubview:icon];
icon.image = isSuccess ? [UIImage imageNamed:TUIContactImagePath_Minimalist(@"contact_add_success")]
: [UIImage imageNamed:TUIContactImagePath_Minimalist(@"contact_add_failed")];
UILabel *descLabel = [[UILabel alloc] init];
[msgView addSubview:descLabel];
descLabel.font = [UIFont systemFontOfSize:kScale390(14)];
descLabel.text = msgText;
descLabel.numberOfLines = 0;
[descLabel sizeToFit];
[icon mas_remakeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(kScale390(12));
make.top.mas_equalTo(kScale390(10));
make.width.height.mas_equalTo(kScale390(16));
}];
[descLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
make.leading.mas_equalTo(icon.mas_trailing).mas_offset(kScale390(8));
make.top.mas_equalTo(kScale390(10));
make.bottom.mas_equalTo(msgView).mas_offset(-kScale390(10));
make.trailing.mas_equalTo(msgView);
}];
[msgView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.center.mas_equalTo(hudView);
make.width.mas_lessThanOrEqualTo(hudView);
}];
[[UIApplication sharedApplication].keyWindow showToast:hudView
duration:3.0
position:TUICSToastPositionCenter
completion:^(BOOL didTap){
}];
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
[self.view endEditing:YES];
}
- (void)didTapOnAvatar:(TUICommonContactProfileCardCell *)cell {
TUIContactAvatarViewController_Minimalist *image = [[TUIContactAvatarViewController_Minimalist alloc] init];
image.avatarData = cell.cardData;
[self.navigationController pushViewController:image animated:YES];
}
@end