From 74fdcd712e48cf3a0b4b4a7738e8704584a8492e Mon Sep 17 00:00:00 2001 From: chenyufeng <503434355@qq.com> Date: Mon, 16 Nov 2015 19:03:34 +0800 Subject: [PATCH] =?UTF-8?q?dev:=E5=AE=8C=E6=88=90=E5=88=86=E4=BA=AB?= =?UTF-8?q?=E7=AC=94=E8=AE=B0=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=B8=8B=E9=9D=A2?= =?UTF-8?q?=E8=BF=9B=E8=A1=8C=E8=AE=BE=E7=BD=AE=E7=95=8C=E9=9D=A2=E7=9A=84?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Oncenote.xcodeproj/project.pbxproj | 8 ++++ Oncenote/AddNoteViewController.m | 25 +++++-------- Oncenote/AllNoteDetailViewController.m | 46 ++++++++++++++++++++++- Oncenote/AllUtils.h | 3 ++ Oncenote/AllUtils.m | 31 ++++++++++++++++ Oncenote/AppDelegate.m | 4 +- Oncenote/Info.plist | 49 ++++++++++++++++++++++++- Oncenote/MainViewController.m | 20 ++++------ Oncenote/NoteDetailViewController.m | 43 ++++++++++++++++++++++ Oncenote/RegisterViewController.m | 27 ++++++-------- Oncenote/shareImg.png | Bin 0 -> 10934 bytes 11 files changed, 208 insertions(+), 48 deletions(-) create mode 100644 Oncenote/shareImg.png diff --git a/Oncenote.xcodeproj/project.pbxproj b/Oncenote.xcodeproj/project.pbxproj index b99ee14..1c90ccd 100644 --- a/Oncenote.xcodeproj/project.pbxproj +++ b/Oncenote.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 715CB76D1BF99B1A0079DB35 /* shareImg.png in Resources */ = {isa = PBXBuildFile; fileRef = 715CB76C1BF99B1A0079DB35 /* shareImg.png */; settings = {ASSET_TAGS = (); }; }; 717902EA1BF48FC100428756 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 717902E91BF48FC100428756 /* main.m */; }; 717902ED1BF48FC100428756 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 717902EC1BF48FC100428756 /* AppDelegate.m */; }; 717902F01BF48FC100428756 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 717902EF1BF48FC100428756 /* MainViewController.m */; }; @@ -97,6 +98,7 @@ /* Begin PBXFileReference section */ 042E519FF0D448E00C6B94EE /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; 52A3A8C36BAD439F0DCC8BC9 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 715CB76C1BF99B1A0079DB35 /* shareImg.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = shareImg.png; sourceTree = ""; }; 717902E51BF48FC100428756 /* Oncenote.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Oncenote.app; sourceTree = BUILT_PRODUCTS_DIR; }; 717902E91BF48FC100428756 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 717902EB1BF48FC100428756 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; @@ -362,6 +364,7 @@ 71A793801BF5E7AD00410FFC /* Resource */ = { isa = PBXGroup; children = ( + 715CB76C1BF99B1A0079DB35 /* shareImg.png */, 717902F41BF48FC100428756 /* Assets.xcassets */, 717902F91BF48FC100428756 /* Info.plist */, ); @@ -544,6 +547,7 @@ 717902F81BF48FC100428756 /* LaunchScreen.storyboard in Resources */, 717902F51BF48FC100428756 /* Assets.xcassets in Resources */, 717902F31BF48FC100428756 /* Main.storyboard in Resources */, + 715CB76D1BF99B1A0079DB35 /* shareImg.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -750,6 +754,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_BITCODE = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -794,6 +799,7 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_BITCODE = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -875,6 +881,7 @@ baseConfigurationReference = 042E519FF0D448E00C6B94EE /* Pods.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ENABLE_BITCODE = YES; INFOPLIST_FILE = Oncenote/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.chenyufengweb.Oncenote; @@ -887,6 +894,7 @@ baseConfigurationReference = C6D3406A90F2A54E2CBA0100 /* Pods.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ENABLE_BITCODE = YES; INFOPLIST_FILE = Oncenote/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.chenyufengweb.Oncenote; diff --git a/Oncenote/AddNoteViewController.m b/Oncenote/AddNoteViewController.m index d5f15cf..ee2e97e 100644 --- a/Oncenote/AddNoteViewController.m +++ b/Oncenote/AddNoteViewController.m @@ -11,6 +11,8 @@ #import "Constant.h" #import "AppDelegate.h" #import "MainViewController.h" +#import "AllUtils.h" + @interface AddNoteViewController () @@ -41,36 +43,29 @@ - (IBAction)naviStoreButtonPressed:(id)sender { if (![noteTitle isEqual: @""] && ![noteText isEqual: @""]){ -// BmobOperation *operate = [[BmobOperation alloc] init]; + // BmobOperation *operate = [[BmobOperation alloc] init]; [BmobOperation addNoteToNoteTable:NOTE_TABLE userId:userId username:username noteTitle:noteTitle noteText:noteText todo:^(BOOL isSuccessful, NSError *error) { if (isSuccessful) { - [self showPromptDialog:@"提示" andMessage:@"增加一条笔记成功" andButton:@"确定" andAction:^(UIAlertAction *action) { + + [AllUtils showPromptDialog:@"提示" andMessage:@"增加一条笔记成功" OKButton:@"确定" OKButtonAction:^(UIAlertAction *action) { //跳回到主界面; UIViewController *mainViewController = [[UIViewController alloc] init]; mainViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"MainViewController"]; [self presentViewController:mainViewController animated:true completion:nil]; NSLog(@"回到主界面"); - }]; + } cancelButton:@"" cancelButtonAction:nil contextViewController:self]; + + }else { - [self showPromptDialog:@"提示" andMessage:@"服务器异常,增加笔记失败。" andButton:@"确定" andAction:nil]; + [AllUtils showPromptDialog:@"提示" andMessage:@"服务器异常,增加笔记失败!" OKButton:@"确定" OKButtonAction:nil cancelButton:@"" cancelButtonAction:nil contextViewController:self]; } }]; }else{ - [self showPromptDialog:@"提示" andMessage:@"标题和内容缺一不可。" andButton:@"确定" andAction:nil]; + [AllUtils showPromptDialog:@"提示" andMessage:@"标题和内容缺一不可!" OKButton:@"确定" OKButtonAction:nil cancelButton:@"" cancelButtonAction:nil contextViewController:self]; } } -#pragma mark - 弹出提示对话框 -- (void)showPromptDialog:(NSString*)title andMessage:(NSString*)message andButton:(NSString*)buttonTitle andAction:(void (^ __nullable)(UIAlertAction *action)) handler{ - - //尝试使用新的弹出对话框; - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; - [alertController addAction:[UIAlertAction actionWithTitle:buttonTitle style:UIAlertActionStyleDefault handler:handler]]; - //弹出提示框; - [self presentViewController:alertController animated:true completion:nil]; -} - @end diff --git a/Oncenote/AllNoteDetailViewController.m b/Oncenote/AllNoteDetailViewController.m index 09c9b65..de227c5 100644 --- a/Oncenote/AllNoteDetailViewController.m +++ b/Oncenote/AllNoteDetailViewController.m @@ -13,6 +13,10 @@ #import "AppDelegate.h" #import "MainViewController.h" +#import +#import +#import "AllUtils.h" + @interface AllNoteDetailViewController () @property (weak, nonatomic) IBOutlet UIImageView *backImageView; @@ -39,17 +43,57 @@ - (void)viewDidLoad { //控件绑定操作; [self.backImageView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(allNoteDetailBackButtonPressed:)]]; + [self.shareImageView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(allNoteDetailShareButtonPressed:)]]; } #pragma mark - 所有的按钮点击操作 - (void) allNoteDetailBackButtonPressed:(id)sender{ - + [self updateBmobObject:NOTE_TABLE noteId:self.noteId noteTitle:self.noteTitleTextField.text noteText:self.noteTextTextView.text]; } +- (void) allNoteDetailShareButtonPressed:(id)sender{ + + NSArray* imageArray = @[[UIImage imageNamed:@"shareImg.png"]]; + + if (imageArray) { + + NSMutableDictionary *shareParams = [NSMutableDictionary dictionary]; + [shareParams SSDKSetupShareParamsByText:[NSString stringWithFormat:@"标题:%@\n内容:%@",self.noteTitleTextField.text,self.noteTextTextView.text] + images:nil + url:nil + title:self.noteTitleTextField.text + type:SSDKContentTypeAuto]; + [ShareSDK showShareActionSheet:nil + items:nil + shareParams:shareParams + onShareStateChanged:^(SSDKResponseState state, SSDKPlatformType platformType, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error, BOOL end) { + + switch (state) { + case SSDKResponseStateSuccess: + { + [AllUtils showPromptDialog:@"提示" andMessage:@"分享成功" OKButton:@"确定" OKButtonAction:nil cancelButton:@"" cancelButtonAction:nil contextViewController:self]; + break; + } + case SSDKResponseStateFail: + { + [AllUtils showPromptDialog:@"提示" andMessage:[NSString stringWithFormat:@"分享失败:%@",error] OKButton:@"确定" OKButtonAction:nil cancelButton:@"" cancelButtonAction:nil contextViewController:self]; + break; + } + default: + break; + } + + }]; + + } + + +} + #pragma mark - 修改笔记 -(void)updateBmobObject:(NSString*)tableName noteId:(NSString*)noteId noteTitle:(NSString*)noteTitle noteText:(NSString*)noteText{ //查找GameScore表 diff --git a/Oncenote/AllUtils.h b/Oncenote/AllUtils.h index ac9504c..a889d2a 100644 --- a/Oncenote/AllUtils.h +++ b/Oncenote/AllUtils.h @@ -7,9 +7,12 @@ // #import +#import @interface AllUtils : NSObject + (NSString *)getDateFromString:(NSString*)date; + ++ (UIAlertController*)showPromptDialog:(NSString*)title andMessage:(NSString*)message OKButton:(NSString*)OKButtonTitle OKButtonAction:(void (^)(UIAlertAction *action))OKButtonHandler cancelButton:(NSString*)cancelButtonTitle cancelButtonAction:(void (^)(UIAlertAction *action))cancelButtonHandler contextViewController:(UIViewController*)contextViewController; @end diff --git a/Oncenote/AllUtils.m b/Oncenote/AllUtils.m index f0807a1..0b12931 100644 --- a/Oncenote/AllUtils.m +++ b/Oncenote/AllUtils.m @@ -40,4 +40,35 @@ + (NSString *)getDateFromString:(NSString*)date{ return str2; } +#pragma mark - 弹出提示对话框 ++ (UIAlertController*)showPromptDialog:(NSString*)title andMessage:(NSString*)message OKButton:(NSString*)OKButtonTitle OKButtonAction:(void (^)(UIAlertAction *action))OKButtonHandler cancelButton:(NSString*)cancelButtonTitle cancelButtonAction:(void (^)(UIAlertAction *action))cancelButtonHandler contextViewController:(UIViewController*)contextViewController{ + + //尝试使用新的弹出对话框; + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; + [alertController addAction:[UIAlertAction actionWithTitle:OKButtonTitle style:UIAlertActionStyleDefault handler:OKButtonHandler]]; + + if ([cancelButtonTitle isEqualToString:@""]) { + //表示不需要“取消”按钮; + }else{ + //需要“取消”按钮; + [alertController addAction:[UIAlertAction actionWithTitle:cancelButtonTitle style:UIAlertActionStyleDefault handler:cancelButtonHandler]]; + } + + //弹出提示框; + [contextViewController presentViewController:alertController animated:true completion:nil]; + + return alertController; +} + @end + + + + + + + + + + + diff --git a/Oncenote/AppDelegate.m b/Oncenote/AppDelegate.m index 3f43360..8381817 100644 --- a/Oncenote/AppDelegate.m +++ b/Oncenote/AppDelegate.m @@ -84,8 +84,8 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( authType:SSDKAuthTypeBoth]; break; case SSDKPlatformTypeWechat: - [appInfo SSDKSetupWeChatByAppId:@"wx4868b35061f87885" - appSecret:@"64020361b8ec4c99936c0e3999a9f249"]; + [appInfo SSDKSetupWeChatByAppId:@"wxa7be3ef36352dc5c" + appSecret:@"d4624c36b6795d1d99dcf0547af5443d"]; break; case SSDKPlatformTypeQQ: [appInfo SSDKSetupQQByAppId:@"1104897411" diff --git a/Oncenote/Info.plist b/Oncenote/Info.plist index 6256730..fcbc338 100644 --- a/Oncenote/Info.plist +++ b/Oncenote/Info.plist @@ -2,8 +2,32 @@ + LSApplicationQueriesSchemes + + mqqOpensdkSSoLogin + mqzone + sinaweibo + alipayauth + alipay + safepay + mqq + mqqapi + mqqopensdkapiV3 + mqqopensdkapiV2 + mqqapiwallet + mqqwpa + mqqbrowser + wtloginmqq2 + weixin + wechat + mqzoneopensdkapiV2 + mqzoneopensdkapi19 + mqzoneopensdkapi + mqzoneopensdk + qzapp + CFBundleDevelopmentRegion - en + zh_CN CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -18,6 +42,29 @@ 1.0 CFBundleSignature ???? + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLName + weixin + CFBundleURLSchemes + + wxa7be3ef36352dc5c + + + + CFBundleTypeRole + Editor + CFBundleURLName + qq + CFBundleURLSchemes + + QQ41DB6583 + + + CFBundleVersion 1 LSRequiresIPhoneOS diff --git a/Oncenote/MainViewController.m b/Oncenote/MainViewController.m index a2e6dbc..ef164de 100644 --- a/Oncenote/MainViewController.m +++ b/Oncenote/MainViewController.m @@ -70,29 +70,23 @@ - (void)viewDidLoad { #pragma mark - 所有的按钮点击事件 //点击导航栏左侧的设置按钮; - (void)naviSettingButtonPressed:(id)sender{ - UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"这是设置按钮" preferredStyle: UIAlertControllerStyleAlert]; - [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - //点击按钮的响应事件; - }]]; + + [AllUtils showPromptDialog:@"提示" andMessage:@"这里是提示信息" OKButton:@"确定" OKButtonAction:^(UIAlertAction *action) { + NSLog(@"点击确定按钮"); + } cancelButton:@"取消" cancelButtonAction:^(UIAlertAction *action) { + NSLog(@"点击取消按钮"); + } contextViewController:self]; - [self presentViewController:alert animated:true completion:nil]; + } - (void)naviRefreshButtonPressed:(id)sender{ - UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"这是刷新按钮" preferredStyle: UIAlertControllerStyleAlert]; - [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - //点击按钮的响应事件; - }]]; - - [self presentViewController:alert animated:true completion:nil]; } //点击导航栏搜索按钮; - (void)naviSearchButtonPressed:(id)sender{ - // NSLog(@"点击了搜索按钮"); - } diff --git a/Oncenote/NoteDetailViewController.m b/Oncenote/NoteDetailViewController.m index cc5071c..3b4d278 100644 --- a/Oncenote/NoteDetailViewController.m +++ b/Oncenote/NoteDetailViewController.m @@ -11,6 +11,9 @@ #import "MainViewController.h" #import "AppDelegate.h" #import "Constant.h" +#import +#import +#import "AllUtils.h" @interface NoteDetailViewController () @@ -37,6 +40,9 @@ - (void)viewDidLoad { //控件绑定操作; [self.backImageView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(noteDetailBackButtonPressed:)]]; + [self.shareImageView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(noteDetailShareButtonPressed:)]]; + + } @@ -53,6 +59,43 @@ - (void) noteDetailBackButtonPressed:(id)sender{ } +- (void) noteDetailShareButtonPressed:(id)sender{ + NSArray* imageArray = @[[UIImage imageNamed:@"shareImg.png"]]; + + if (imageArray) { + + NSMutableDictionary *shareParams = [NSMutableDictionary dictionary]; + [shareParams SSDKSetupShareParamsByText:[NSString stringWithFormat:@"标题:%@\n内容:%@",self.noteTitleTextField.text,self.noteTextTextView.text] + images:nil + url:nil + title:self.noteTitleTextField.text + type:SSDKContentTypeAuto]; + [ShareSDK showShareActionSheet:nil + items:nil + shareParams:shareParams + onShareStateChanged:^(SSDKResponseState state, SSDKPlatformType platformType, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error, BOOL end) { + + switch (state) { + case SSDKResponseStateSuccess: + { + [AllUtils showPromptDialog:@"提示" andMessage:@"分享成功" OKButton:@"确定" OKButtonAction:nil cancelButton:@"" cancelButtonAction:nil contextViewController:self]; + break; + } + case SSDKResponseStateFail: + { + [AllUtils showPromptDialog:@"提示" andMessage:[NSString stringWithFormat:@"分享失败:%@",error] OKButton:@"确定" OKButtonAction:nil cancelButton:@"" cancelButtonAction:nil contextViewController:self]; + break; + } + default: + break; + } + + }]; + + } +} + + #pragma mark - 修改笔记 -(void)updateBmobObject:(NSString*)tableName noteId:(NSString*)noteId noteTitle:(NSString*)noteTitle noteText:(NSString*)noteText{ //查找GameScore表 diff --git a/Oncenote/RegisterViewController.m b/Oncenote/RegisterViewController.m index a0ff74d..7b31677 100644 --- a/Oncenote/RegisterViewController.m +++ b/Oncenote/RegisterViewController.m @@ -8,6 +8,7 @@ #import "RegisterViewController.h" #import +#import "AllUtils.h" @interface RegisterViewController () @@ -35,16 +36,20 @@ - (IBAction)createAccountButtonPressed:(id)sender { [user setPassword:password]; [user signUpInBackgroundWithBlock:^(BOOL isSuccessful, NSError *error) { if (isSuccessful) { - NSLog(@"注册成功"); - [self showPromptDialog:@"提示" andMessage:@"注册成功,请登录" andButton:@"确定" andAction:nil]; + [AllUtils showPromptDialog:@"提示" andMessage:@"注册成功,请登录!" OKButton:@"确定" OKButtonAction:^(UIAlertAction *action) { + NSLog(@"注册成功"); + } cancelButton:@"" cancelButtonAction:nil contextViewController:self]; + }else{ - NSLog(@"注册失败"); - [self showPromptDialog:@"提示" andMessage:@"服务器异常,注册失败。" andButton:@"确定" andAction:nil]; + [AllUtils showPromptDialog:@"提示" andMessage:@"服务器异常,注册失败!" OKButton:@"确定" OKButtonAction:^(UIAlertAction *action) { + NSLog(@"注册失败"); + } cancelButton:@"" cancelButtonAction:nil contextViewController:self]; } }]; }else{ - NSLog(@"请输入信息"); - [self showPromptDialog:@"提示" andMessage:@"请填写完整信息。" andButton:@"确定" andAction:nil]; + [AllUtils showPromptDialog:@"提示" andMessage:@"请填写完整信息!" OKButton:@"确定" OKButtonAction:^(UIAlertAction *action) { + NSLog(@"请输入信息"); + } cancelButton:@"" cancelButtonAction:nil contextViewController:self]; } } @@ -56,14 +61,4 @@ - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ } -#pragma mark - 弹出提示对话框 -- (void)showPromptDialog:(NSString*)title andMessage:(NSString*)message andButton:(NSString*)buttonTitle andAction:(void (^ __nullable)(UIAlertAction *action)) handler{ - - //尝试使用新的弹出对话框; - UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert]; - [alertController addAction:[UIAlertAction actionWithTitle:buttonTitle style:UIAlertActionStyleDefault handler:handler]]; - //弹出提示框; - [self presentViewController:alertController animated:true completion:nil]; -} - @end diff --git a/Oncenote/shareImg.png b/Oncenote/shareImg.png new file mode 100644 index 0000000000000000000000000000000000000000..b368a8e25b9635a17d4a38cc78f0cb08c31acc72 GIT binary patch literal 10934 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 literal 0 HcmV?d00001