// // TUIFriendRequestViewController.m // TUIKitDemo // // Created by annidyfeng on 2019/4/18. // Copyright © 2019 kennethmiao. All rights reserved. // #import "TUIFriendRequestViewController_Minimalist.h" #import #import #import #import #import "TUICommonContactProfileCardCell.h" #import "TUICommonContactSwitchCell.h" #import "TUIContactAvatarViewController_Minimalist.h" #import "TUIContactButtonCell_Minimalist.h" #import @interface TUIFriendRequestViewController_Minimalist () @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 *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