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

265 lines
11 KiB
Objective-C

//
// TUIFriendRequestViewController.m
// TUIKitDemo
//
// Created by annidyfeng on 2019/4/18.
// Copyright © 2019 kennethmiao. All rights reserved.
//
#import "TUIFriendRequestViewController.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.h"
@interface TUIFriendRequestViewController () <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
- (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 groupTableViewBackgroundColor];
if (@available(iOS 15.0, *)) {
self.tableView.sectionHeaderTopPadding = 0;
}
self.addWordTextView = [[UITextView alloc] initWithFrame:CGRectZero];
self.addWordTextView.font = [UIFont systemFontOfSize:14];
self.addWordTextView.textAlignment = isRTL()?NSTextAlignmentRight:NSTextAlignmentLeft;
NSString *selfUserID = [[V2TIMManager sharedInstance] getLoginUser];
[[V2TIMManager sharedInstance] getUsersInfo:@[ selfUserID ]
succ:^(NSArray<V2TIMUserFullInfo *> *infoList) {
if (infoList && infoList.count > 0) {
V2TIMUserFullInfo *userInfo = [infoList firstObject];
if (userInfo) {
self.addWordTextView.text =
[NSString stringWithFormat:TIMCommonLocalizableString(FriendRequestFormat),
userInfo.nickName ? userInfo.nickName : userInfo.userID];
}
}
}
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 colorWithRed:136 / 255.0 green:136 / 255.0 blue:136 / 255.0 alpha:1 / 1.0];
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) {
TUIButtonCell *cell = [[TUIButtonCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"send"];
TUIButtonCellData *data = [[TUIButtonCellData alloc] init];
data.style = ButtonWhite;
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;
if (ERR_SUCC == result.resultCode) {
msg = TIMCommonLocalizableString(FriendAddResultSuccess);
} else if (ERR_SVR_FRIENDSHIP_INVALID_PARAMETERS == result.resultCode) {
if ([result.resultInfo isEqualToString:@"Err_SNS_FriendAdd_Friend_Exist"]) {
msg = TIMCommonLocalizableString(FriendAddResultExists);
}
} else {
msg = [TUITool convertIMError:result.resultCode msg:result.resultInfo];
}
if (msg.length == 0) {
msg = [NSString stringWithFormat:@"%ld", (long)result.resultCode];
}
[TUITool hideToastActivity];
[TUITool makeToast:msg duration:3.0 idposition:TUICSToastPositionBottom];
}
fail:^(int code, NSString *desc) {
[TUITool hideToastActivity];
[TUITool makeToastError:code msg:desc];
}];
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
[self.view endEditing:YES];
}
- (void)didTapOnAvatar:(TUICommonContactProfileCardCell *)cell {
TUIContactAvatarViewController *image = [[TUIContactAvatarViewController alloc] init];
image.avatarData = cell.cardData;
[self.navigationController pushViewController:image animated:YES];
}
@end