diff --git a/Blog.xcodeproj/project.pbxproj b/Blog.xcodeproj/project.pbxproj index 8b9e9d1..b81f04a 100644 --- a/Blog.xcodeproj/project.pbxproj +++ b/Blog.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 1BCFCC3709A3C3783E180815 /* ChangeTitleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BCFCE26B630D546311BB715 /* ChangeTitleViewController.m */; }; 1BCFCC637C63C780248D685E /* PostCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BCFCB5C36F301B2B93F8069 /* PostCell.m */; }; 1BCFCD7E8EEBFAA97226B0BF /* UIColor+Hex.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BCFC23988387A5CAE551C90 /* UIColor+Hex.m */; }; 1BCFCF6DB93786CC2EDB8F69 /* PostCollection.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BCFC3B62AA92DB07923F7C1 /* PostCollection.m */; }; @@ -49,6 +50,8 @@ 1BCFCB18C8C8304D67E6462E /* PostCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PostCollection.h; sourceTree = ""; }; 1BCFCB5C36F301B2B93F8069 /* PostCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PostCell.m; sourceTree = ""; }; 1BCFCCF30594E0E2DCC32116 /* PostCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PostCell.h; sourceTree = ""; }; + 1BCFCDD73D4AE8F16A9C9E3D /* ChangeTitleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ChangeTitleViewController.h; sourceTree = ""; }; + 1BCFCE26B630D546311BB715 /* ChangeTitleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChangeTitleViewController.m; sourceTree = ""; }; 1BCFCFA1E7D4AFDA984693E1 /* UIColor+Hex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIColor+Hex.h"; sourceTree = ""; }; 7B4070521AE46BC9000C2E43 /* auth.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = auth.json; sourceTree = ""; }; 7B5C4BD919F2606900667D48 /* Blog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Blog.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -164,6 +167,8 @@ 1BCFCCF30594E0E2DCC32116 /* PostCell.h */, 1BCFC3B62AA92DB07923F7C1 /* PostCollection.m */, 1BCFCB18C8C8304D67E6462E /* PostCollection.h */, + 1BCFCE26B630D546311BB715 /* ChangeTitleViewController.m */, + 1BCFCDD73D4AE8F16A9C9E3D /* ChangeTitleViewController.h */, ); path = Blog; sourceTree = ""; @@ -428,6 +433,7 @@ 1BCFCC637C63C780248D685E /* PostCell.m in Sources */, 1BCFCD7E8EEBFAA97226B0BF /* UIColor+Hex.m in Sources */, 1BCFCF6DB93786CC2EDB8F69 /* PostCollection.m in Sources */, + 1BCFCC3709A3C3783E180815 /* ChangeTitleViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Blog/Base.lproj/Main.storyboard b/Blog/Base.lproj/Main.storyboard index 89d5470..6f7f5cb 100644 --- a/Blog/Base.lproj/Main.storyboard +++ b/Blog/Base.lproj/Main.storyboard @@ -48,7 +48,7 @@ - + Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. @@ -117,6 +117,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Blog/ChangeTitleViewController.h b/Blog/ChangeTitleViewController.h new file mode 100644 index 0000000..8e93bfb --- /dev/null +++ b/Blog/ChangeTitleViewController.h @@ -0,0 +1,12 @@ +// +// Created by Sami Samhuri on 15-04-24. +// Copyright (c) 2015 Guru Logic Inc. All rights reserved. +// +@import UIKit; + +@interface ChangeTitleViewController : UIViewController + +@property (nonatomic, copy) NSString *articleTitle; +@property (nonatomic, copy) dispatch_block_t dismissBlock; + +@end \ No newline at end of file diff --git a/Blog/ChangeTitleViewController.m b/Blog/ChangeTitleViewController.m new file mode 100644 index 0000000..1bfcf53 --- /dev/null +++ b/Blog/ChangeTitleViewController.m @@ -0,0 +1,44 @@ +// +// Created by Sami Samhuri on 15-04-24. +// Copyright (c) 2015 Guru Logic Inc. All rights reserved. +// +#import "ChangeTitleViewController.h" + +@interface ChangeTitleViewController () + +@property (nonatomic, weak) IBOutlet UITextField *titleField; + +@end + +@implementation ChangeTitleViewController + +@synthesize articleTitle = _articleTitle; + +- (void)viewDidLoad { + [super viewDidLoad]; + self.titleField.text = _articleTitle; + [self.titleField becomeFirstResponder]; +} + +- (NSString *)articleTitle { + if (self.titleField) { + return self.titleField.text; + } + return _articleTitle; +} + +- (void)setArticleTitle:(NSString *)articleTitle { + _articleTitle = [articleTitle copy]; + if (self.titleField) { + self.titleField.text = articleTitle; + } +} + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + if (self.dismissBlock) { + self.dismissBlock(); + } + return NO; +} + +@end \ No newline at end of file diff --git a/Blog/EditorViewController.m b/Blog/EditorViewController.m index 58c6e8f..9b7f860 100644 --- a/Blog/EditorViewController.m +++ b/Blog/EditorViewController.m @@ -11,8 +11,9 @@ #import "BlogController.h" #import "Post.h" #import "PreviewViewController.h" +#import "ChangeTitleViewController.h" -@interface EditorViewController () +@interface EditorViewController () @property (nonatomic, weak) IBOutlet UILabel *titleView; @property (nonatomic, weak) IBOutlet UITextView *textView; @@ -57,6 +58,7 @@ - (void)configureTitleView { self.titleView.text = self.modifiedPost.title.length ? self.modifiedPost.title : @"Untitled"; + [self.titleView sizeToFit]; } - (void)viewDidLoad { @@ -149,4 +151,36 @@ self.modifiedPost = [self.modifiedPost copyWithURL:url]; } +- (IBAction)presentChangeTitle:(id)sender { + if (self.presentedViewController) { + return; + } + + ChangeTitleViewController *changeTitleViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Change Title View Controller"]; + changeTitleViewController.modalPresentationStyle = UIModalPresentationPopover; + changeTitleViewController.preferredContentSize = CGSizeMake(320, 60); + changeTitleViewController.articleTitle = self.modifiedPost.title; + UIPopoverPresentationController *presentationController = changeTitleViewController.popoverPresentationController; + presentationController.delegate = self; + presentationController.sourceView = self.view; + presentationController.sourceRect = CGRectMake(CGRectGetWidth(self.view.bounds) / 2, 0, 1, 1); + presentationController.permittedArrowDirections = UIPopoverArrowDirectionUp; + changeTitleViewController.dismissBlock = ^{ + NSString *title = changeTitleViewController.articleTitle; + [self updatePostTitle:title]; + [self dismissViewControllerAnimated:YES completion:nil]; + }; + [self presentViewController:changeTitleViewController animated:YES completion:nil]; +} + +- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller { + return UIModalPresentationNone; +} + +- (void)popoverPresentationControllerDidDismissPopover:(UIPopoverPresentationController *)popoverPresentationController { + ChangeTitleViewController *changeTitleViewController = (ChangeTitleViewController *)popoverPresentationController.presentedViewController; + NSString *title = changeTitleViewController.articleTitle; + [self updatePostTitle:title]; +} + @end diff --git a/Blog/Post.m b/Blog/Post.m index 4d789c9..4658f74 100644 --- a/Blog/Post.m +++ b/Blog/Post.m @@ -85,7 +85,7 @@ @"url" : url ?: [NSNull null], @"draft" : @(self.draft), @"new" : @(self.new), - } error:nil]; + } error:nil]; } - (BOOL)isEqualToPost:(Post *)other {