ifish/Ifish/UMCommunity/UMCommunitySDK/UMCommunityUI/simple/Edit/UMComBriefEditViewController.m

1048 lines
42 KiB
Objective-C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// UMComBriefEditViewController.m
// UMCommunity
//
// Created by 张军华 on 16/5/16.
// Copyright © 2016年 Umeng. All rights reserved.
//
#import "UMComBriefEditViewController.h"
#import "UINavigationBar+ChangeBackgroundColor.h"
#import "UMComBriefEditView.h"
#import "UMComResouceDefines.h"
#import "UMComAddedImageView.h"
#import <AVFoundation/AVFoundation.h>
#import <CoreLocation/CoreLocation.h>
#import "UMImagePickerController.h"
#import "UMComNavigationController.h"
#import "UMComEditTextView.h"
#import <UMComDataStorage/UMComTopic.h>
#import "UMComProgressHUD.h"
#import "UMComShowToast.h"
#import <UMCommunitySDK/UMComDataTypeDefine.h>
#import "UMComFeedEditDataController.h"
#import "UMComSelectTopicViewController.h"
#import <UMCommunitySDK/UMComSession.h>
#import <UMComDataStorage/UMComFeed.h>
#import <UMComFoundation/UMComKit+Color.h>
#import <UMComFoundation/UMComDefines.h>
#import "UMComNotificationMacro.h"
#define MinTextLength 5
const CGFloat g_template_LeftMargin = 10;//左间距
const CGFloat g_template_SelectedTopicView_Height = 44;//话题控件的高度
const CGFloat g_template_SelectedTopicView_TopicLabel_LeftMargin = 10;//话题控件的子控件topicLabel的左边距
const CGFloat g_template_SelectedTopicView_TopicLabel_indicatorBtnRightMargin = 15;//话题控件的子控件的indicatorBtn右边距
const CGFloat g_template_SelectedTopicView_TopicLabel_indicatorBtnWidth = 22;//话题控件的子控件的indicatorBtn宽度
const CGFloat g_template_SelectedTopicView_TopicLabel_indicatorBtnHeight = 22;//话题控件的子控件的indicatorBtn宽度
const CGFloat g_template_briefeditView_LeftMargin = 10;//编辑控件的左边距
const CGFloat g_template_briefeditView_RightMargin = 10;//编辑控件的右边距
const CGFloat g_template_briefeditView_Height = 190;//编辑控件的高度
const CGFloat g_template_selectIMGBtn_LeftMargin = 15;//menu控件的中selectIMGBtn的左边距
const CGFloat g_template_selectIMGBtn_Height = 28;//menu控件的中selectIMGBtn的高度
const CGFloat g_template_selectIMGBtn_Width = 28;//menu控件的中selectIMGBtn的宽度
const CGFloat g_template_menuView_Height = 50;//menu控件的高度
const CGFloat g_template_AddImageViewHeight = 90.f;//添加图片控件的高度
const CGFloat g_template_AddImageViewItemSize = 60.f;//添加图片控件的高度
const CGFloat g_template_AddImageViewImageSpace = 15.f;//添加图片控件中item间的距离
const CGFloat g_template_AddImageViewLeftMargin = 15.f;//添加图片控件中item的相对左边距
const CGFloat g_template_AddImageViewRightMargin = 0.f;//添加图片控件的item的相对右边距
const CGFloat g_template_AddImageViewTopMargin = 10.f;//添加图片控件的item的相对上边距
const CGFloat g_template_AddImageViewBottomMargin = 10.f;//添加图片控件的item的相对下边距
const CGFloat g_template_TipAddImageHeight = 28.f;//添加图片控件的item的相对下边距
const CGFloat g_template_MaxImageCount = 9;//添加图片控件的item的相对下边距
#define g_selectedTopictemplate @"发送内容到%@版块"
#define g_tipAddImagetemplate @"还可以上传%lu张图片"
typedef NS_ENUM(NSInteger, UMComBriefEditViewType){
UMComBriefEditViewType_ModifiedTopic,
UMComBriefEditViewType_NOModifiedTopic,
};
typedef NS_ENUM(NSInteger,UMComCreateFeedType)
{
UMComCreateFeedType_Normal = 0,//普通请求
UMComCreateFeedType_Announcement = 1,//公告(全局管理员才能发公告)
};
static UIImage* g_HighlightedImgForPostBTN;
static UIImage* g_HighlightedImgForSelectedTopicIndicator;
@interface UIButtonImageTool : UIView
+ (UIImage *)buttonImageFromColor:(UIColor *)color;
@end
@implementation UIButtonImageTool
//利用纯色生成一个图片
+ (UIImage *)buttonImageFromColor:(UIColor *)color{
CGRect rect = CGRectMake(0,0,5,5);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
@end
typedef void (^SelectedTopicAction)();
typedef void (^SelectedTopicFinishedAction)(UMComTopic* topic,NSError* error);
@interface UMComSelectedTopicView : UIView
@property(nonatomic,readwrite,strong) UIButton* backgroudBtn;
@property(nonatomic,readwrite,strong) UILabel* topicLabel;
@property(nonatomic,readwrite,strong) UIButton* indicatorBtn;
@property(nonatomic,readwrite,strong) UMComBriefAddedImageView* addImgView;
@property(nonatomic,copy)SelectedTopicAction selectedTopicAction;
@property(nonatomic,copy)SelectedTopicFinishedAction selectedTopicFinishedAction;
-(void) createBackgroudBtn;
-(void) createTopicLabel;
-(void) createIndicatorBtn;
-(void) disableUnClickedBtns;//去掉点击效果
-(void) handleSelectedTopicBtn:(id)target;
-(void) setTopicTitle:(NSString*)topicName;
@end
@interface UMComSelectedTopicView ()
@end
@implementation UMComSelectedTopicView
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
[self createBackgroudBtn];
[self createTopicLabel];
[self createIndicatorBtn];
}
return self;
}
-(void) createBackgroudBtn
{
self.backgroudBtn = [[UIButton alloc] initWithFrame:self.bounds];
self.backgroudBtn.backgroundColor = UMComColorWithHexString(@"#F6f7f9");
[self addSubview:self.backgroudBtn];
if (!g_HighlightedImgForSelectedTopicIndicator) {
g_HighlightedImgForSelectedTopicIndicator = [UIButtonImageTool buttonImageFromColor:[UIColor lightGrayColor]];
}
[self.backgroudBtn setBackgroundImage:g_HighlightedImgForSelectedTopicIndicator forState:UIControlStateHighlighted];
[self.backgroudBtn addTarget:self action:@selector(handleSelectedTopicBtn:) forControlEvents:UIControlEventTouchUpInside];
}
-(void) createTopicLabel
{
self.topicLabel = [[UILabel alloc] initWithFrame:CGRectMake(g_template_SelectedTopicView_TopicLabel_LeftMargin, 0, self.bounds.size.width - g_template_SelectedTopicView_TopicLabel_LeftMargin - g_template_SelectedTopicView_TopicLabel_indicatorBtnWidth-g_template_SelectedTopicView_TopicLabel_indicatorBtnRightMargin - 2, self.bounds.size.height)];//需要减2个单位的间隔
self.topicLabel.font = UMComFontNotoSansLightWithSafeSize(14);
self.topicLabel.textColor = UMComColorWithHexString(@"#999999");
self.topicLabel.backgroundColor = [UIColor clearColor];
[self.backgroudBtn addSubview:self.topicLabel];
}
-(void) createIndicatorBtn
{
self.indicatorBtn = [UIButton buttonWithType:UIButtonTypeCustom];
self.indicatorBtn.frame = CGRectMake(self.bounds.size.width - g_template_SelectedTopicView_TopicLabel_indicatorBtnWidth - g_template_SelectedTopicView_TopicLabel_indicatorBtnRightMargin, (g_template_SelectedTopicView_Height - g_template_SelectedTopicView_TopicLabel_indicatorBtnHeight)/2, g_template_SelectedTopicView_TopicLabel_indicatorBtnWidth,g_template_SelectedTopicView_TopicLabel_indicatorBtnHeight);
[self.indicatorBtn setImage:UMComSimpleImageWithImageName(@"um_edit_more") forState:UIControlStateNormal];
if (!g_HighlightedImgForSelectedTopicIndicator) {
g_HighlightedImgForSelectedTopicIndicator = [UIButtonImageTool buttonImageFromColor:[UIColor lightGrayColor]];
}
[self.indicatorBtn setBackgroundImage:g_HighlightedImgForSelectedTopicIndicator forState:UIControlStateHighlighted];
[self.backgroudBtn addSubview:self.indicatorBtn];
[self.indicatorBtn addTarget:self action:@selector(handleSelectedTopicBtn:) forControlEvents:UIControlEventTouchUpInside];
}
-(void) handleSelectedTopicBtn:(id)target
{
if (self.selectedTopicAction) {
self.selectedTopicAction();
}
}
-(void) setTopicTitle:(NSString*)topicName
{
if (topicName) {
NSString* topicTitle = [[NSString alloc] initWithFormat:g_selectedTopictemplate,topicName];
self.topicLabel.text = topicTitle;
}
else
{
NSString* topicTitle = [[NSString alloc] initWithFormat:g_selectedTopictemplate,@"XXX"];
self.topicLabel.text = topicTitle;
}
}
-(void) disableUnClickedBtns
{
[self.backgroudBtn setBackgroundImage:nil forState:UIControlStateHighlighted];
[self.backgroudBtn removeTarget:self action:@selector(handleSelectedTopicBtn:) forControlEvents:UIControlEventTouchUpInside];
[self.indicatorBtn setBackgroundImage:nil forState:UIControlStateHighlighted];
[self.backgroudBtn addSubview:self.indicatorBtn];
[self.indicatorBtn removeTarget:self action:@selector(handleSelectedTopicBtn:) forControlEvents:UIControlEventTouchUpInside];
}
@end
@interface UMComBriefEditViewController ()<UIImagePickerControllerDelegate,UINavigationControllerDelegate,UIActionSheetDelegate,UMComEditTextViewDelegate,UIAlertViewDelegate>
@property (nonatomic,readwrite, strong)UIScrollView* backgroudScrollView;//可滑动的背景控件
@property (nonatomic,readwrite,strong)UMComSelectedTopicView* selectedTopicView;//选择话题的控件
@property(nonatomic,readwrite,strong)UMComEditTextView *briefeditView;//内容
@property(nonatomic,readwrite,strong)UIView* menuView;//显示显示图片选取的控件
@property(nonatomic,readwrite,strong)UMComBriefAddedImageView* addImgView;//增加图片的控
@property(nonatomic,readwrite,strong)UILabel* tipAddImage;//提示增加图片
@property(nonatomic,readwrite,strong)UIView* tipAddImageBackGroud;//提示增加图片提示的
@property (nonatomic, strong) NSMutableArray *originImages;
@property(nonatomic,assign)UMComBriefEditViewType briefEditViewType;
@property(nonatomic,weak)UIViewController* popToViewController;
@property (nonatomic, strong) UMComTopic *topic;
@property (nonatomic, strong) UMComFeedEditDataController *editDataController;
//创建navigation
-(void) createNavigationItems;
-(void) handleBackBtn:(id)target;
-(void) handlePostBtn:(id)target;
-(void) doPostWithType:(UMComCreateFeedType)type;
-(void) alertCreateFeedType;
-(BOOL) checkShowprompting;
-(void) handleClickCloseForprompting:(id)sender;
//创建背景控件
-(void) createBackgroudScrollView;
//创建显示话题的控件
-(void) createSelectedTopicionView;
//创建话题控件下方的分割线
-(void) createSeparateLineBelowSelectedTopicionView;
//创建UMComBriefEditView
-(void) createBriefEditView;
//创建话题控件下方的分割线
-(void) createSeparateLineBelowBriefEditView;
//创建导航条
-(void) createMenuView;
-(void) handleSelectIMGAndCamera:(id)target;
-(void) handleSelectIMG:(id)target;
-(void) handleSelectCamera:(id)target;
-(void) createAddedImageView;
-(void) popActionSheetForAddImageView; //用户点击+添加事件
- (void)setUpPicker;
-(void)takePhoto:(id)sender;
- (void)dealWithAssets:(NSArray *)assets;
- (void)handleOriginImages:(NSArray *)images;
- (UIImage *)compressImage:(UIImage *)image;
- (void)updateImageAddedImageView;
-(void) createTipAddImage;
-(void)viewsFrameChange;
@end
@implementation UMComBriefEditViewController
- (instancetype)init
{
self = [super init];
if (self) {
self.editDataController = [[UMComFeedEditDataController alloc] init];
}
return self;
}
-(id)initNOModifiedTopic:(UMComTopic*)topic withPopToViewController:(UIViewController*)popToViewController
{
if (self = [self init]) {
_topic = topic;
_popToViewController = popToViewController;
_briefEditViewType = UMComBriefEditViewType_NOModifiedTopic;
}
return self;
}
-(id)initModifiedTopic:(UMComTopic*)topic withPopToViewController:(UIViewController*)popToViewController
{
if (self = [self init]) {
_topic = topic;
_popToViewController = popToViewController;
_briefEditViewType = UMComBriefEditViewType_ModifiedTopic;
}
return self;
}
#pragma mark - overide UIViewController
-(void) dealloc
{
//NSLog(@"UMComBriefEditViewController_dealloc");
}
- (void)viewDidLoad {
[super viewDidLoad];
self.originImages = [NSMutableArray arrayWithCapacity:9];
[self createNavigationItems];
[self createBackgroudScrollView];
[self createSelectedTopicionView];
[self createSeparateLineBelowSelectedTopicionView];
[self createBriefEditView];
[self createSeparateLineBelowBriefEditView];
[self createMenuView];
[self createAddedImageView];
[self createTipAddImage];
[self viewsFrameChange];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController.navigationBar umcom_setBackgroundColor:UMComColorWithHexString(@"#469ef8")];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.navigationController.navigationBar umcom_reset];
}
#pragma mark - private method
-(void) createNavigationItems
{
//设置NavigationItem的Leftitem
UIButton* backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
backBtn.frame = CGRectMake(0, 0, 44,24);
[backBtn setTitle:UMComLocalizedString(@"um_com_edit_back",@"取消") forState:UIControlStateNormal];
backBtn.titleLabel.font = UMComFontNotoSansLightWithSafeSize(14);
[backBtn setTitleColor:UMComColorWithHexString(@"#F6f7f9") forState:UIControlStateNormal];
[backBtn setTitleColor:[UIColor grayColor] forState:UIControlStateHighlighted];
backBtn.backgroundColor = [UIColor clearColor];
[backBtn addTarget:self action:@selector(handleClickCloseForprompting:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem* backBtnItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
self.navigationItem.leftBarButtonItem = nil;
self.navigationItem.leftBarButtonItems = nil;
self.navigationItem.leftBarButtonItem = backBtnItem;
//设置NavigationItem的rightitem
UIButton* postBtn = [UIButton buttonWithType:UIButtonTypeCustom];
postBtn.frame = CGRectMake(0, 0, 44,24);
[postBtn setTitle:UMComLocalizedString(@"um_com_edit_post",@"发布") forState:UIControlStateNormal];
postBtn.titleLabel.font = UMComFontNotoSansLightWithSafeSize(14);
[postBtn setTitleColor:UMComColorWithHexString(@"#469ef8") forState:UIControlStateNormal];
[postBtn setTitleColor:[UIColor grayColor] forState:UIControlStateHighlighted];
postBtn.backgroundColor = UMComColorWithHexString(@"#F6F7F9");
if (!g_HighlightedImgForPostBTN) {
g_HighlightedImgForPostBTN = [UIButtonImageTool buttonImageFromColor:[UIColor lightGrayColor]];
}
[postBtn setBackgroundImage:g_HighlightedImgForPostBTN forState:UIControlStateHighlighted];
postBtn.layer.cornerRadius = 6;
postBtn.clipsToBounds = YES;
[postBtn addTarget:self action:@selector(handlePostBtn:) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem* postBtnItem = [[UIBarButtonItem alloc] initWithCustomView:postBtn];
self.navigationItem.rightBarButtonItem = postBtnItem;
//设置中间文本
UILabel* titleLabel = [[UILabel alloc] initWithFrame:self.navigationController.navigationBar.bounds];
titleLabel.text = UMComLocalizedString(@"um_com_Edit_TitleText", @"新鲜事");
titleLabel.textAlignment = NSTextAlignmentCenter;
titleLabel.font = UMComFontNotoSansLightWithSafeSize(17);
titleLabel.textColor = UMComColorWithHexString(@"FFFFFF");
titleLabel.backgroundColor = [UIColor clearColor];
[self.navigationItem setTitleView:titleLabel];
}
-(void) handleBackBtn:(id)target
{
[self.navigationController.navigationBar umcom_reset];
if (self.briefEditViewType == UMComBriefEditViewType_ModifiedTopic) {
if (self.popToViewController) {
[self.navigationController popToViewController:self.popToViewController animated:YES];
}
else
{
[self.navigationController popViewControllerAnimated:YES];
}
}
else if (self.briefEditViewType == UMComBriefEditViewType_NOModifiedTopic)
{
if (self.popToViewController) {
[self.navigationController popToViewController:self.popToViewController animated:YES];
}
else
{
[self.navigationController popViewControllerAnimated:YES];
}
}
else{
[self.navigationController popViewControllerAnimated:YES];
}
}
/**
* 判断用户是否修改了编辑页面
*
* @return YES 表示修改了,NO 表示没有修改
*/
-(BOOL) checkShowprompting
{
if (self.briefeditView.text.length > 0 || self.originImages.count > 0) {
return YES;
}
return NO;
}
#define SYSTEM_VERSION [[UIDevice currentDevice].systemVersion floatValue]
- (void)handleClickCloseForprompting:(id)sender
{
if (![self checkShowprompting]) {
[self handleBackBtn:nil];
return;
}
if (SYSTEM_VERSION >= 8.0){
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:UMComLocalizedString(@"um_com_prompting", @"提示")   message:UMComLocalizedString(@"um_com_emptyContentWhenGoBack",@"退出此次编辑,内容将丢失!") preferredStyle:UIAlertControllerStyleAlert];
__weak typeof(self) weakself = self;
UIAlertAction *okAction = [UIAlertAction actionWithTitle:UMComLocalizedString(@"um_com_makesure", @"确定") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[weakself handleBackBtn:nil];
}];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:UMComLocalizedString(@"um_com_cancel", @"取消") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
}];
[alertController addAction:cancelAction];
[alertController addAction:okAction];
[self presentViewController:alertController animated:YES completion:nil];
}
else{
[self.briefeditView resignFirstResponder];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:UMComLocalizedString(@"um_com_prompting", @"提示") message:UMComLocalizedString(@"um_com_emptyContentWhenGoBack",@"退出此次编辑,内容将丢失!") delegate:self cancelButtonTitle:UMComLocalizedString(@"um_com_cancel", @"取消") otherButtonTitles:UMComLocalizedString(@"um_com_makesure", @"确定"),nil];
alertView.tag = 11111;
[alertView show];
}
}
- (void)dealWhenPostFeedFinish:(NSArray *)responseObject error:(NSError *)error
{
if (error) {
[UMComShowToast showFetchResultTipWithError:error];
} else if([responseObject isKindOfClass:[NSArray class]] && responseObject.count > 0) {
UMComFeed *feed = responseObject.firstObject;
[[NSNotificationCenter defaultCenter] postNotificationName:kNotificationPostFeedResultNotification object:feed];
[UMComShowToast createFeedSuccess];
}
}
-(void) handlePostBtn:(id)target
{
//对话题检测
if (!self.topic) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:UMComLocalizedString(@"um_com_sorry", @"抱歉") message:UMComLocalizedString(@"um_com_selectionTopicPrompt",@"请选择所属话题") delegate:nil cancelButtonTitle:UMComLocalizedString(@"um_com_ok",@"") otherButtonTitles:nil];
[alertView show];
return;
}
// 检查内容的最大长度
if (!self.briefeditView.text || [self.briefeditView getRealTextLength] > self.briefeditView.maxTextLenght) {
NSString *tooLongNotice = [NSString stringWithFormat:@"内容过长,超出%d个字符",(int)[self.briefeditView getRealTextLength] - (int)self.briefeditView.maxTextLenght];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:UMComLocalizedString(@"um_com_sorry", @"抱歉") message:UMComLocalizedString(@"The content is too long",tooLongNotice) delegate:nil cancelButtonTitle:UMComLocalizedString(@"um_com_ok",@"") otherButtonTitles:nil];
[alertView show];
//[self.briefeditView becomeFirstResponder];
return;
}
if (([self.briefeditView getRealTextLength] < MinTextLength) && (self.originImages.count == 0)) {
NSString *tooShortNotice = [NSString stringWithFormat:@"发布的内容太少啦,再多写点内容。"];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:UMComLocalizedString(@"um_com_sorry", @"抱歉") message:UMComLocalizedString(@"The content is too long",tooShortNotice) delegate:nil cancelButtonTitle:UMComLocalizedString(@"um_com_ok",@"") otherButtonTitles:nil];
[alertView show];
return;
}
//准备发送请求
if ([[UMComSession sharedInstance] isPermissionBulletin]) {
//说明是全局管理员,需要询问是否发送公告还是普通请求
[self alertCreateFeedType];
}
else{
[self doPostWithType:UMComCreateFeedType_Normal];
}
}
-(void) doPostWithType:(UMComCreateFeedType)type
{
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
//加入等待框
UMComProgressHUD *hud = [UMComProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
hud.label.text = UMComLocalizedString(@"um_com_postingContent",@"发送中...");
hud.label.backgroundColor = [UIColor clearColor];
[self.briefeditView resignFirstResponder];
__weak typeof(self) weakself = self;
//设置
self.editDataController.text = self.briefeditView.text;
if (self.topic) {
self.editDataController.topics = [NSArray arrayWithObject:self.topic];
}
self.editDataController.images = self.originImages;
self.editDataController.type = @(type);
[self.editDataController createFeedWithCompletion:^(id responseObject, NSError *error) {
[hud hideAnimated:YES];
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
if (responseObject && [responseObject isKindOfClass:[UMComFeed class]] && !error) {
[weakself dealWhenPostFeedFinish:@[responseObject] error:error];
dispatch_async(dispatch_get_main_queue(), ^{
//如果没有错误就返回
[weakself handleBackBtn:nil];
});
}
else{
[UMComShowToast showFetchResultTipWithError:error];
}
}];
}
-(void) alertCreateFeedType
{
if (SYSTEM_VERSION >= 8.0){
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:UMComLocalizedString(@"um_com_prompting", @"提示") message:UMComLocalizedString(@"um_com_announcementPrompting",@"是否需要将本条内容标记为公告?") preferredStyle:UIAlertControllerStyleAlert];
__weak typeof(self) weakself = self;
UIAlertAction *okAction = [UIAlertAction actionWithTitle:UMComLocalizedString(@"um_com_yes", @"") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[weakself doPostWithType:UMComCreateFeedType_Announcement];
}];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:UMComLocalizedString(@"um_com_no", @"") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[weakself doPostWithType:UMComCreateFeedType_Normal];
}];
[alertController addAction:cancelAction];
[alertController addAction:okAction];
[self presentViewController:alertController animated:YES completion:nil];
}
else{
[self.briefeditView resignFirstResponder];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:UMComLocalizedString(@"um_com_prompting", @"提示") message:UMComLocalizedString(@"um_com_announcementPrompting",@"是否需要将本条内容标记为公告?") delegate:self cancelButtonTitle:UMComLocalizedString(@"um_com_cancel", @"取消") otherButtonTitles:UMComLocalizedString(@"um_com_makesure", @"确定"),nil];
alertView.tag = 11112;
[alertView show];
}
}
-(void) createBackgroudScrollView
{
self.backgroudScrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
self.backgroudScrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight;
self.backgroudScrollView.backgroundColor = UMComColorWithHexString(@"#e8eaee");
self.view.backgroundColor = UMComColorWithHexString(@"#e8eaee");
self.backgroudScrollView.contentSize = self.view.bounds.size;
[self.view addSubview:self.backgroudScrollView];
}
-(void) createSelectedTopicionView
{
self.selectedTopicView = [[UMComSelectedTopicView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, g_template_SelectedTopicView_Height)];
[self.backgroudScrollView addSubview:self.selectedTopicView];
if (self.briefEditViewType == UMComBriefEditViewType_NOModifiedTopic) {
[self.selectedTopicView disableUnClickedBtns];
}
__weak typeof(self) weakself = self;
self.selectedTopicView.selectedTopicAction = ^(){
[weakself.briefeditView resignFirstResponder];
UMComSelectTopicViewController* selectTopicViewController = [[UMComSelectTopicViewController alloc] init];
[weakself presentViewController:selectTopicViewController animated:YES completion:nil];
selectTopicViewController.closeTopicViewAction = ^(){
[weakself dismissViewControllerAnimated:YES completion:nil];
};
selectTopicViewController.selectTopicViewFinishAction = ^(UMComTopic* topic){
weakself.topic = topic;
[weakself.selectedTopicView setTopicTitle:weakself.topic.name];
[weakself dismissViewControllerAnimated:YES completion:nil];
};
};
}
-(void) createSeparateLineBelowSelectedTopicionView
{
UIView* separateLine = [[UIView alloc] initWithFrame:CGRectMake(0, self.selectedTopicView.frame.origin.y +self.selectedTopicView.frame.size.height , self.view.bounds.size.width, 1)];
separateLine.backgroundColor = UMComColorWithHexString(@"#dfdfdf");
[self.backgroudScrollView addSubview:separateLine];
}
-(void) createBriefEditView
{
//此view是为了覆盖briefeditView的偏移的10像素的背景
UIView* briefeditViewBackgroud = [[UIView alloc] initWithFrame:CGRectMake(0, self.selectedTopicView.frame.origin.y + self.selectedTopicView.frame.size.height + 1, [UIScreen mainScreen].bounds.size.width, g_template_briefeditView_Height)];
//briefeditViewBackgroud.backgroundColor = UMComColorWithHexString(@"#f6f7f9");
briefeditViewBackgroud.backgroundColor = [UIColor whiteColor];
[self.backgroudScrollView addSubview:briefeditViewBackgroud];
NSArray *regexArray = [NSArray arrayWithObjects:UserRulerString, TopicRulerString,UrlRelerSring, nil];
self.briefeditView = [[UMComEditTextView alloc]initWithFrame:CGRectMake(g_template_briefeditView_LeftMargin, self.selectedTopicView.frame.origin.y + self.selectedTopicView.frame.size.height + 1, self.view.bounds.size.width - g_template_briefeditView_LeftMargin - g_template_briefeditView_RightMargin, g_template_briefeditView_Height) checkWords:nil regularExStrArray:regexArray];
self.briefeditView.editDelegate = self;
self.briefeditView.maxTextLenght = [UMComSession sharedInstance].maxFeedLength;
[self.briefeditView setFont:UMComFontNotoSansLightWithSafeSize(14)];
[self.backgroudScrollView addSubview:self.briefeditView];
self.briefeditView.placeholderLabel.text = UMComLocalizedString(@"um_com_briefeditView_placeholder", @"说点什么吧");
//[self.briefeditView becomeFirstResponder];
//http://stackoverflow.com/questions/19046969/uitextview-content-size-different-in-ios7
//此问题出现在copy paste超过一页数据的时候输入就会出现文字先跳动顶端再回到底端的问题
//设置连续布局属性(并且只能在外面设置才有效在UMComEditTextView的内部函数中设置无效)
if (UMComSystem_Version_Greater_Than_Or_Equal_To(@"7.0"))
{
self.briefeditView.layoutManager.allowsNonContiguousLayout = NO;
}
}
-(void) createSeparateLineBelowBriefEditView
{
UIView* separateLine = [[UIView alloc] initWithFrame:CGRectMake(0, self.briefeditView.frame.origin.y +self.briefeditView.frame.size.height , self.view.bounds.size.width, 1)];
separateLine.backgroundColor = UMComColorWithHexString(@"#dfdfdf");
[self.backgroudScrollView addSubview:separateLine];
}
-(void) createMenuView
{
self.menuView = [[UIView alloc] initWithFrame:CGRectMake(0, self.briefeditView.frame.origin.y + self.briefeditView.frame.size.height + 1, self.view.bounds.size.width, g_template_menuView_Height)];
//self.menuView.backgroundColor= UMComColorWithHexString(@"#f6f7f9");
self.menuView.backgroundColor= [UIColor whiteColor];
[self.backgroudScrollView addSubview:self.menuView];
//相册入口
UIButton* selectIMGBtn = [UIButton buttonWithType:UIButtonTypeCustom];
selectIMGBtn.frame = CGRectMake(g_template_selectIMGBtn_LeftMargin,(self.menuView.frame.size.height - g_template_selectIMGBtn_Height)/2 , g_template_selectIMGBtn_Width, g_template_selectIMGBtn_Height);
[selectIMGBtn setImage:UMComSimpleImageWithImageName(@"um_edit_pic") forState:UIControlStateNormal];
[selectIMGBtn addTarget:self action:@selector(handleSelectIMGAndCamera:) forControlEvents:UIControlEventTouchUpInside];
[self.menuView addSubview:selectIMGBtn];
//相机入口
/*
UIButton* cameraBtn = [UIButton buttonWithType:UIButtonTypeCustom];
cameraBtn.frame = CGRectMake(g_template_selectIMGBtn_LeftMargin + g_template_selectIMGBtn_Width + g_template_selectIMGBtn_LeftMargin,(self.menuView.frame.size.height - g_template_selectIMGBtn_Height)/2 , g_template_selectIMGBtn_Width, g_template_selectIMGBtn_Height);
[cameraBtn setImage:UMComSimpleImageWithImageName(@"um_edit_pic") forState:UIControlStateNormal];
[cameraBtn addTarget:self action:@selector(handleSelectCamera:) forControlEvents:UIControlEventTouchUpInside];
[self.menuView addSubview:cameraBtn];
*/
}
-(void) handleSelectIMGAndCamera:(id)target
{
[self.briefeditView resignFirstResponder];
[self popActionSheetForAddImageView];
}
-(void) handleSelectIMG:(id)target
{
[self.briefeditView resignFirstResponder];
[self setUpPicker];
}
-(void) handleSelectCamera:(id)target
{
[self.briefeditView resignFirstResponder];
[self takePhoto:nil];
}
-(void) createAddedImageView
{
self.addImgView = [[UMComBriefAddedImageView alloc] initWithFrame:CGRectMake(0, self.menuView.frame.origin.y + self.menuView.frame.size.height, self.view.bounds.size.width, g_template_AddImageViewHeight)];
[self.backgroudScrollView addSubview:self.addImgView];
self.addImgView.itemSize = CGSizeMake(g_template_AddImageViewItemSize, g_template_AddImageViewItemSize);
self.addImgView.imageSpace = g_template_AddImageViewImageSpace;
self.addImgView.isAddImgViewShow = YES;
self.addImgView.normalAddImg = UMComSimpleImageWithImageName(@"um_com_edit_add");
self.addImgView.highlightedAddImg = UMComSimpleImageWithImageName(@"um_com_edit_add_click");
self.addImgView.deleteImg = UMComSimpleImageWithImageName(@"um_com_edit_delete");
[self.addImgView addImages:[NSArray array]];
__weak typeof(self) weakSelf = self;
[self.addImgView setPickerAction:^{
[weakSelf.briefeditView resignFirstResponder];
[weakSelf popActionSheetForAddImageView];
}];
self.addImgView.imagesChangeFinish = ^(){
[weakSelf updateImageAddedImageView];
};
self.addImgView.imagesDeleteFinish = ^(NSInteger index){
[weakSelf.originImages removeObjectAtIndex:index];
};
}
- (void)updateImageAddedImageView
{
[self viewsFrameChange];
}
-(void) popActionSheetForAddImageView
{
//[self setUpPicker];
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:UMComLocalizedString(@"um_com_selectImageSource",@"请选择图片源:")
delegate:self
cancelButtonTitle:UMComLocalizedString(@"um_com_cancel", @"取消")
destructiveButtonTitle:nil
otherButtonTitles:UMComLocalizedString(@"um_com_camera",@"拍照"),UMComLocalizedString(@"um_com_album", @"相册"),nil];
[sheet showInView:self.view];
}
#pragma mark -UIActionSheetDelegate
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
switch (buttonIndex) {
case 0://拍照
[self takePhoto:nil];
break;
case 1://相册
[self setUpPicker];
break;
case 2://取消
{
}
break;
default:
break;
}
}
#pragma mark UIImagePickerControllerDelegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[picker dismissViewControllerAnimated:YES completion:nil];
UIImage *selectImage = [info valueForKey:@"UIImagePickerControllerOriginalImage"];
UIImage *tempImage = nil;
if (selectImage.imageOrientation != UIImageOrientationUp) {
UIGraphicsBeginImageContext(selectImage.size);
[selectImage drawInRect:CGRectMake(0, 0, selectImage.size.width, selectImage.size.height)];
tempImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}else{
tempImage = selectImage;
}
if (self.originImages.count < 9) {
[self.originImages addObject:tempImage];
[self handleOriginImages:@[tempImage]];
}
}
-(void)takePhoto:(id)sender
{
if(self.originImages.count >= 9){
[[[UIAlertView alloc] initWithTitle:UMComLocalizedString(@"um_com_sorry", @"抱歉") message:UMComLocalizedString(@"um_com_selectTooManyImages",@"图片最多只能选9张") delegate:nil cancelButtonTitle:UMComLocalizedString(@"um_com_ok",@"") otherButtonTitles:nil] show];
return;
}
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if (authStatus == AVAuthorizationStatusDenied || authStatus == AVAuthorizationStatusRestricted)
{
[[[UIAlertView alloc] initWithTitle:nil message:UMComLocalizedString(@"um_com_photoAlbumAuthentication", @"本应用无访问照片的权限,如需访问,可在设置中修改") delegate:nil cancelButtonTitle:UMComLocalizedString(@"um_com_ok",@"") otherButtonTitles:nil, nil] show];
return;
}
}else{
ALAuthorizationStatus author = [ALAssetsLibrary authorizationStatus];
if (author == kCLAuthorizationStatusRestricted || author == kCLAuthorizationStatusDenied)
{
[[[UIAlertView alloc] initWithTitle:nil message:UMComLocalizedString(@"um_com_photoAlbumAuthentication", @"本应用无访问照片的权限,如需访问,可在设置中修改") delegate:nil cancelButtonTitle:UMComLocalizedString(@"um_com_ok",@"") otherButtonTitles:nil, nil] show];
return;
}
}
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.delegate = self;
[self presentViewController:imagePicker animated:YES completion:^{
}];
}
}
- (void)setUpPicker
{
ALAuthorizationStatus author = [ALAssetsLibrary authorizationStatus];
if (author == kCLAuthorizationStatusRestricted || author == kCLAuthorizationStatusDenied)
{
[[[UIAlertView alloc] initWithTitle:nil message:UMComLocalizedString(@"um_com_photoAlbumAuthentication", @"本应用无访问照片的权限,如需访问,可在设置中修改") delegate:nil cancelButtonTitle:UMComLocalizedString(@"um_com_ok", @"好的") otherButtonTitles:nil, nil] show];
return;
}
if([UMImagePickerController isAccessible])
{
UMImagePickerController *imagePickerController = [[UMImagePickerController alloc] initWithBackImage:UMComSimpleImageWithImageName(@"um_forum_back_gray")];
imagePickerController.minimumNumberOfSelection = 1;
imagePickerController.maximumNumberOfSelection = 9 - [self.addImgView.arrayImages count];
[imagePickerController setFinishHandle:^(BOOL isCanceled,NSArray *assets){
if(!isCanceled)
{
[self dealWithAssets:assets];
}
}];
UMComNavigationController *navigationController = [[UMComNavigationController alloc] initWithRootViewController:imagePickerController];
[self presentViewController:navigationController animated:YES completion:NULL];
}
}
- (void)dealWithAssets:(NSArray *)assets
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
NSMutableArray *array = [NSMutableArray array];
for(ALAsset *asset in assets)
{
UIImage *image = [UIImage imageWithCGImage:[asset thumbnail]];
if (image) {
[array addObject:image];
}
if ([asset defaultRepresentation]) {
//这里把图片压缩成fullScreenImage分辨率上传可以修改为fullResolutionImage使用原图上传
UIImage *originImage = [UIImage
imageWithCGImage:[asset.defaultRepresentation fullScreenImage]
scale:[asset.defaultRepresentation scale]
orientation:UIImageOrientationUp];
if (originImage) {
[self.originImages addObject:originImage];
}
} else {
UIImage *image = [UIImage imageWithCGImage:[asset thumbnail]];
image = [self compressImage:image];
if (image) {
[self.originImages addObject:image];
}
}
}
dispatch_async(dispatch_get_main_queue(), ^{
[self handleOriginImages:array];
});
});
}
- (UIImage *)compressImage:(UIImage *)image
{
UIImage *resultImage = image;
if (resultImage.CGImage) {
NSData *tempImageData = UIImageJPEGRepresentation(resultImage,0.9);
if (tempImageData) {
resultImage = [UIImage imageWithData:tempImageData];
}
}
return image;
}
- (void)handleOriginImages:(NSArray *)images{
//[self.originImages addObjectsFromArray:images];//zhangjunhua_删除回调前已经加入
[self.addImgView addImages:images];
[self viewsFrameChange];
}
-(void) createTipAddImage
{
self.tipAddImageBackGroud = [[UIView alloc] initWithFrame:CGRectMake(0, self.addImgView.frame.origin.y + self.addImgView.frame.size.height + 1, self.view.bounds.size.width, g_template_TipAddImageHeight)];
self.tipAddImageBackGroud.backgroundColor = UMComColorWithHexString(@"#F6F7F9");
[self.backgroudScrollView addSubview:self.tipAddImageBackGroud];
self.tipAddImage = [[UILabel alloc] initWithFrame:CGRectMake(g_template_AddImageViewLeftMargin, 0, self.tipAddImageBackGroud.bounds.size.width - g_template_AddImageViewLeftMargin, g_template_TipAddImageHeight)];
self.tipAddImage.text = [[NSString alloc] initWithFormat:g_tipAddImagetemplate,(unsigned long)(g_template_MaxImageCount-self.originImages.count)];
self.tipAddImage.textColor =UMComColorWithHexString(@"#666666");
self.tipAddImage.font = UMComFontNotoSansLightWithSafeSize(15);
self.tipAddImage.backgroundColor = [UIColor clearColor];
[self.tipAddImageBackGroud addSubview:self.tipAddImage];
}
-(void)viewsFrameChange
{
if (self.originImages.count > 0) {
self.addImgView.hidden = NO;
self.tipAddImageBackGroud.hidden = NO;
}
else{
self.addImgView.hidden = YES;
self.tipAddImageBackGroud.hidden = YES;
}
CGRect orginFrame = self.tipAddImageBackGroud.frame;
orginFrame.origin.y = self.addImgView.frame.origin.y + self.addImgView.frame.size.height;
self.tipAddImage.text = [[NSString alloc] initWithFormat:g_tipAddImagetemplate,(unsigned long)(g_template_MaxImageCount-self.originImages.count)];
self.tipAddImageBackGroud.frame = orginFrame;
[self.selectedTopicView setTopicTitle:self.topic.name];
//设置self.backgroudScrollView的contentSize
self.backgroudScrollView.contentSize = CGSizeMake(self.view.bounds.size.width, self.addImgView.frame.origin.y + self.addImgView.frame.size.height + self.tipAddImage.bounds.size.height);
//NSLog(@"self.view.height = %f,self.backgroudScrollView.height = %f",self.view.bounds.size.height,self.backgroudScrollView.contentSize.height);
}
#pragma mark - UMComEditTextViewDelegate
//- (NSArray *)editTextViewDidUpdate:(UMComEditTextView *)textView matchWords:(NSArray *)matchWords
//{
// return [NSArray array];
//}
- (BOOL)editTextView:(UMComEditTextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text complection:(void (^)())block
{
return YES;
}
- (void)editTextViewDidChangeSelection:(UMComEditTextView *)textView
{
}
- (void)editTextViewDidEndEditing:(UMComEditTextView *)textView
{
}
#pragma mark - UIAlertViewDelegate
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if(alertView.tag == 11111)//点击确定按钮
{
if (buttonIndex == 1)
{
//iOS 8.0dismiss alert view时系统会尝试恢复之前的keyboard input,导致界面消失了,键盘会闪现,
//此处延迟0.5秒就是为了让键盘弹出再做onClickClose的关闭操作
[self performSelector:@selector(handleBackBtn:) withObject:nil afterDelay:0.5];
//[self onClickClose:nil];
}
}
else if (alertView.tag == 11112)
{
if (buttonIndex == 1)
{
[self doPostWithType:UMComCreateFeedType_Announcement];
}
else
{
[self doPostWithType:UMComCreateFeedType_Normal];
}
}
else{
}
}
@end