aboutsummaryrefslogtreecommitdiffhomepage
path: root/AuthSamples/Sample/CustomTokenDataEntryViewController.m
diff options
context:
space:
mode:
authorGravatar Paul Beusterien <paulbeusterien@google.com>2017-05-15 12:27:07 -0700
committerGravatar Paul Beusterien <paulbeusterien@google.com>2017-05-15 12:27:07 -0700
commit98ba64449a632518bd2b86fe8d927f4a960d3ddc (patch)
tree131d9c4272fa6179fcda6c5a33fcb3b1bd57ad2e /AuthSamples/Sample/CustomTokenDataEntryViewController.m
parent32461366c9e204a527ca05e6e9b9404a2454ac51 (diff)
Initial
Diffstat (limited to 'AuthSamples/Sample/CustomTokenDataEntryViewController.m')
-rw-r--r--AuthSamples/Sample/CustomTokenDataEntryViewController.m148
1 files changed, 148 insertions, 0 deletions
diff --git a/AuthSamples/Sample/CustomTokenDataEntryViewController.m b/AuthSamples/Sample/CustomTokenDataEntryViewController.m
new file mode 100644
index 0000000..b65c244
--- /dev/null
+++ b/AuthSamples/Sample/CustomTokenDataEntryViewController.m
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2017 Google
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#import "CustomTokenDataEntryViewController.h"
+
+/** @var navigationBarDefaultHeight
+ @brief The default height to use for new navigation bars' frames.
+ */
+static const NSUInteger navigationBarDefaultHeight = 55;
+
+/** @var navigationBarSystemHeight
+ @brief Set after a navigation bar has been created to obtain the system-specified height of the
+ navigation bar.
+ */
+static NSUInteger navigationBarSystemHeight = navigationBarDefaultHeight;
+
+/** @var kTitle
+ @brief The title of the view controller as it appears at the top of the screen in the navigation
+ bar.
+ */
+static NSString *const kTitle = @"Enter Token";
+
+/** @var kCancel
+ @brief The text for the "Cancel" button.
+ */
+static NSString *const kCancel = @"Cancel";
+
+/** @var kDone
+ @brief The text for the "Done" button.
+ */
+static NSString *const kDone = @"Done";
+
+@implementation CustomTokenDataEntryViewController {
+ /** @var _completion
+ @brief The block we will call when the user presses the "cancel" or "done" buttons.
+ @remarks Passed into the initializer.
+ */
+ CustomTokenDataEntryViewControllerCompletion _completion;
+
+ /** @var _tokenTextView
+ @brief The text view allowing the user to enter their custom token text.
+ @remarks Constructed and set in the method: @c loadTextView.
+ */
+ __weak UITextView *_Nullable _tokenTextView;
+}
+
+- (nullable instancetype)initWithCompletion:
+ (CustomTokenDataEntryViewControllerCompletion)completion {
+ self = [super initWithNibName:nil bundle:nil];
+ if (self) {
+ _completion = completion;
+ }
+ return self;
+}
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+ [self loadHeader];
+ [self loadTextView];
+}
+
+#pragma mark - View
+
+/** @fn loadHeader
+ @brief Loads the header bar along the top of the view with "Cancel" and "Done" buttons, as well
+ as a brief title asking the user to enter the custom token text.
+ @remarks Updates navigationBarSystemHeight, so should be called before any method which depends
+ on that variable being updated (like the @c loadTextView method, which uses the value to
+ determine how much room is left on the screen.)
+ */
+- (void)loadHeader {
+ CGRect navBarFrame = CGRectMake(0, 0, self.view.bounds.size.width, navigationBarDefaultHeight);
+ UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:navBarFrame];
+ navBar.autoresizingMask = UIViewAutoresizingFlexibleWidth
+ | UIViewAutoresizingFlexibleBottomMargin;
+
+ UINavigationItem *navItem = [[UINavigationItem alloc] initWithTitle:kTitle];
+ UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:kCancel
+ style:UIBarButtonItemStylePlain
+ target:self
+ action:@selector(cancelPressed:)];
+ UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:kDone
+ style:UIBarButtonItemStylePlain
+ target:self
+ action:@selector(donePressed:)];
+ navItem.leftBarButtonItem = cancelButton;
+ navItem.rightBarButtonItem = doneButton;
+
+ [navBar setItems:@[ navItem ] animated:NO];
+
+ [self.view addSubview:navBar];
+
+ // Obtain the system-specified height of the navigation bar.
+ navigationBarSystemHeight = navBar.frame.size.height;
+}
+
+/** @fn loadTextView
+ @brief Loads the text field for the user to enter their custom token text.
+ @remarks Relies on the navigationBarSystemHeight variable being correct.
+ */
+- (void)loadTextView {
+ CGRect tokenTextViewFrame =
+ CGRectMake(0,
+ navigationBarSystemHeight,
+ self.view.bounds.size.width,
+ self.view.bounds.size.height - navigationBarSystemHeight);
+ UITextView *tokenTextView = [[UITextView alloc] initWithFrame:tokenTextViewFrame];
+ tokenTextView.backgroundColor = [UIColor whiteColor];
+ tokenTextView.textAlignment = NSTextAlignmentLeft;
+
+ [self.view addSubview:tokenTextView];
+ _tokenTextView = tokenTextView;
+}
+
+#pragma mark - Actions
+
+- (void)cancelPressed:(id)sender {
+ [self finishByCancelling:YES withUserEnteredTokenText:nil];
+}
+
+- (void)donePressed:(id)sender {
+ [self finishByCancelling:NO withUserEnteredTokenText:_tokenTextView.text];
+}
+
+#pragma mark - Workflow
+
+- (void)finishByCancelling:(BOOL)cancelled
+ withUserEnteredTokenText:(nullable NSString *)userEnteredTokenText {
+ [self dismissViewControllerAnimated:YES completion:^{
+ _completion(cancelled,
+ cancelled ? nil : userEnteredTokenText);
+ }];
+}
+
+@end