create project function done, not yet with paremeter exception considered
After Width: | Height: | Size: 7.1 KiB |
After Width: | Height: | Size: 7.8 KiB |
After Width: | Height: | Size: 606 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 603 B |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 400 B |
After Width: | Height: | Size: 1013 B |
|
@ -0,0 +1,47 @@
|
||||||
|
//
|
||||||
|
// MLTableAlert.h
|
||||||
|
//
|
||||||
|
// Version 1.0
|
||||||
|
//
|
||||||
|
// Created by Matteo Del Vecchio on 11/12/12.
|
||||||
|
// Copyright (c) 2012 Matthew Labs. All rights reserved.
|
||||||
|
// For the complete copyright notice, read Source Code License.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <UIKit/UIKit.h>
|
||||||
|
#import <QuartzCore/QuartzCore.h>
|
||||||
|
|
||||||
|
@class MLTableAlert;
|
||||||
|
|
||||||
|
|
||||||
|
// Blocks definition for table view management
|
||||||
|
typedef NSInteger (^MLTableAlertNumberOfRowsBlock)(NSInteger section);
|
||||||
|
typedef UITableViewCell* (^MLTableAlertTableCellsBlock)(MLTableAlert *alert, NSIndexPath *indexPath);
|
||||||
|
typedef void (^MLTableAlertRowSelectionBlock)(NSIndexPath *selectedIndex);
|
||||||
|
typedef void (^MLTableAlertCompletionBlock)(void);
|
||||||
|
|
||||||
|
|
||||||
|
@interface MLTableAlert : UIView <UITableViewDataSource, UITableViewDelegate>
|
||||||
|
|
||||||
|
@property (nonatomic, strong) UITableView *table;
|
||||||
|
|
||||||
|
@property (nonatomic, assign) CGFloat height;
|
||||||
|
|
||||||
|
@property (nonatomic, strong) MLTableAlertCompletionBlock completionBlock; // Called when Cancel button pressed
|
||||||
|
@property (nonatomic, strong) MLTableAlertRowSelectionBlock selectionBlock; // Called when a row in table view is pressed
|
||||||
|
|
||||||
|
|
||||||
|
// Classe method; rowsBlock and cellsBlock MUST NOT be nil
|
||||||
|
+(MLTableAlert *)tableAlertWithTitle:(NSString *)title cancelButtonTitle:(NSString *)cancelBtnTitle numberOfRows:(MLTableAlertNumberOfRowsBlock)rowsBlock andCells:(MLTableAlertTableCellsBlock)cellsBlock;
|
||||||
|
|
||||||
|
// Initialization method; rowsBlock and cellsBlock MUST NOT be nil
|
||||||
|
-(id)initWithTitle:(NSString *)title cancelButtonTitle:(NSString *)cancelBtnTitle numberOfRows:(MLTableAlertNumberOfRowsBlock)rowsBlock andCells:(MLTableAlertTableCellsBlock)cellsBlock;
|
||||||
|
|
||||||
|
// Allows you to perform custom actions when a row is selected or the cancel button is pressed
|
||||||
|
-(void)configureSelectionBlock:(MLTableAlertRowSelectionBlock)selBlock andCompletionBlock:(MLTableAlertCompletionBlock)comBlock;
|
||||||
|
|
||||||
|
// Show the alert
|
||||||
|
-(void)show;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
|
@ -0,0 +1,339 @@
|
||||||
|
//
|
||||||
|
// MLTableAlert.m
|
||||||
|
//
|
||||||
|
// Version 1.0
|
||||||
|
//
|
||||||
|
// Created by Matteo Del Vecchio on 11/12/12.
|
||||||
|
// Copyright (c) 2012 Matthew Labs. All rights reserved.
|
||||||
|
// For the complete copyright notice, read Source Code License.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "MLTableAlert.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define kTableAlertWidth 284.0
|
||||||
|
#define kLateralInset 12.0
|
||||||
|
#define kVerticalInset 8.0
|
||||||
|
#define kMinAlertHeight 264.0
|
||||||
|
#define kCancelButtonHeight 44.0
|
||||||
|
#define kCancelButtonMargin 5.0
|
||||||
|
#define kTitleLabelMargin 12.0
|
||||||
|
|
||||||
|
|
||||||
|
// Since orientation is managed by view controllers,
|
||||||
|
// MLTableAlertController is used under the MLTableAlert
|
||||||
|
// to provide support for orientation and rotation
|
||||||
|
@interface MLTableAlertController : UIViewController
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation MLTableAlertController
|
||||||
|
|
||||||
|
// Orientation support
|
||||||
|
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
|
||||||
|
{
|
||||||
|
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
|
||||||
|
return YES;
|
||||||
|
else
|
||||||
|
return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
|
||||||
|
{
|
||||||
|
MLTableAlert *ta = [self.view.subviews lastObject];
|
||||||
|
if (ta != nil && [ta isKindOfClass:[MLTableAlert class]])
|
||||||
|
{
|
||||||
|
// Rotate the MLTableAlert if orientation changes
|
||||||
|
// when it is visible on screen
|
||||||
|
[UIView animateWithDuration:duration animations:^{
|
||||||
|
[ta sizeToFit];
|
||||||
|
|
||||||
|
CGFloat x = CGRectGetMidX(self.view.bounds);
|
||||||
|
CGFloat y = CGRectGetMidY(self.view.bounds);
|
||||||
|
ta.center = CGPointMake(x, y);
|
||||||
|
ta.frame = CGRectIntegral(ta.frame);
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@interface MLTableAlert ()
|
||||||
|
@property (nonatomic, strong) UIView *alertBg;
|
||||||
|
@property (nonatomic, strong) UILabel *titleLabel;
|
||||||
|
@property (nonatomic, strong) UIButton *cancelButton;
|
||||||
|
@property (nonatomic, strong) UIWindow *appWindow;
|
||||||
|
|
||||||
|
@property (nonatomic, strong) NSString *title;
|
||||||
|
@property (nonatomic, strong) NSString *cancelButtonTitle;
|
||||||
|
|
||||||
|
@property (nonatomic) BOOL cellSelected;
|
||||||
|
|
||||||
|
@property (nonatomic, strong) MLTableAlertNumberOfRowsBlock numberOfRows;
|
||||||
|
@property (nonatomic, strong) MLTableAlertTableCellsBlock cells;
|
||||||
|
|
||||||
|
-(void)createBackgroundView; // Draws and manages the view behind the alert
|
||||||
|
-(void)animateIn; // Animates the alert when it has to be shown
|
||||||
|
-(void)animateOut; // Animates the alert when it has to be dismissed
|
||||||
|
-(void)dismissTableAlert; // Dismisses the alert
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@implementation MLTableAlert
|
||||||
|
|
||||||
|
#pragma mark - MLTableAlert Class Method
|
||||||
|
|
||||||
|
+(MLTableAlert *)tableAlertWithTitle:(NSString *)title cancelButtonTitle:(NSString *)cancelBtnTitle numberOfRows:(MLTableAlertNumberOfRowsBlock)rowsBlock andCells:(MLTableAlertTableCellsBlock)cellsBlock
|
||||||
|
{
|
||||||
|
return [[self alloc] initWithTitle:title cancelButtonTitle:cancelBtnTitle numberOfRows:rowsBlock andCells:cellsBlock];
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - MLTableAlert Initialization
|
||||||
|
|
||||||
|
-(id)initWithTitle:(NSString *)title cancelButtonTitle:(NSString *)cancelButtonTitle numberOfRows:(MLTableAlertNumberOfRowsBlock)rowsBlock andCells:(MLTableAlertTableCellsBlock)cellsBlock
|
||||||
|
{
|
||||||
|
// Throw exception if rowsBlock or cellsBlock is nil
|
||||||
|
if (rowsBlock == nil || cellsBlock == nil)
|
||||||
|
{
|
||||||
|
[[NSException exceptionWithName:@"rowsBlock and cellsBlock Error" reason:@"These blocks MUST NOT be nil" userInfo:nil] raise];
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
self = [super init];
|
||||||
|
if (self)
|
||||||
|
{
|
||||||
|
_numberOfRows = rowsBlock;
|
||||||
|
_cells = cellsBlock;
|
||||||
|
_title = title;
|
||||||
|
_cancelButtonTitle = cancelButtonTitle;
|
||||||
|
_height = kMinAlertHeight; // Defining default (and minimum) alert height
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - Actions
|
||||||
|
|
||||||
|
-(void)configureSelectionBlock:(MLTableAlertRowSelectionBlock)selBlock andCompletionBlock:(MLTableAlertCompletionBlock)comBlock
|
||||||
|
{
|
||||||
|
self.selectionBlock = selBlock;
|
||||||
|
self.completionBlock = comBlock;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)createBackgroundView
|
||||||
|
{
|
||||||
|
// reset cellSelected value
|
||||||
|
self.cellSelected = NO;
|
||||||
|
|
||||||
|
// Allocating controller for presenting MLTableAlert
|
||||||
|
MLTableAlertController *controller = [[MLTableAlertController alloc] init];
|
||||||
|
controller.view.backgroundColor = [UIColor clearColor];
|
||||||
|
|
||||||
|
// Creating new UIWindow to manage MLTableAlert and MLTableAlertController
|
||||||
|
self.appWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
|
||||||
|
self.appWindow.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.4];
|
||||||
|
self.appWindow.rootViewController = controller;
|
||||||
|
self.appWindow.alpha = 0.0;
|
||||||
|
self.appWindow.windowLevel = UIWindowLevelStatusBar;
|
||||||
|
self.appWindow.hidden = NO;
|
||||||
|
[self.appWindow makeKeyAndVisible];
|
||||||
|
|
||||||
|
// Adding MLTableAlert as subview of MLTableAlertController (controller)
|
||||||
|
[controller.view addSubview:self];
|
||||||
|
|
||||||
|
// setting options to MLTableAlert
|
||||||
|
self.frame = self.superview.bounds;
|
||||||
|
self.opaque = NO;
|
||||||
|
|
||||||
|
// get background color darker
|
||||||
|
[UIView animateWithDuration:0.2 animations:^{
|
||||||
|
self.appWindow.alpha = 1.0;
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)animateIn
|
||||||
|
{
|
||||||
|
// UIAlertView-like pop in animation
|
||||||
|
self.alertBg.transform = CGAffineTransformMakeScale(0.6, 0.6);
|
||||||
|
[UIView animateWithDuration:0.2 animations:^{
|
||||||
|
self.alertBg.transform = CGAffineTransformMakeScale(1.1, 1.1);
|
||||||
|
} completion:^(BOOL finished){
|
||||||
|
[UIView animateWithDuration:1.0/15.0 animations:^{
|
||||||
|
self.alertBg.transform = CGAffineTransformMakeScale(0.9, 0.9);
|
||||||
|
} completion:^(BOOL finished){
|
||||||
|
[UIView animateWithDuration:1.0/7.5 animations:^{
|
||||||
|
self.alertBg.transform = CGAffineTransformIdentity;
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)animateOut
|
||||||
|
{
|
||||||
|
[UIView animateWithDuration:1.0/7.5 animations:^{
|
||||||
|
self.alertBg.transform = CGAffineTransformMakeScale(0.9, 0.9);
|
||||||
|
} completion:^(BOOL finished) {
|
||||||
|
[UIView animateWithDuration:1.0/15.0 animations:^{
|
||||||
|
self.alertBg.transform = CGAffineTransformMakeScale(1.1, 1.1);
|
||||||
|
} completion:^(BOOL finished) {
|
||||||
|
[UIView animateWithDuration:0.3 animations:^{
|
||||||
|
self.alertBg.transform = CGAffineTransformMakeScale(0.01, 0.01);
|
||||||
|
self.appWindow.alpha = 0.3;
|
||||||
|
} completion:^(BOOL finished){
|
||||||
|
// table alert not shown anymore
|
||||||
|
[self removeFromSuperview];
|
||||||
|
self.appWindow.hidden = YES;
|
||||||
|
[self.appWindow resignKeyWindow];
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)show
|
||||||
|
{
|
||||||
|
[self createBackgroundView];
|
||||||
|
|
||||||
|
// alert view creation
|
||||||
|
self.alertBg = [[UIView alloc] initWithFrame:CGRectZero];
|
||||||
|
[self addSubview:self.alertBg];
|
||||||
|
|
||||||
|
// setting alert background image
|
||||||
|
UIImageView *alertBgImage = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"MLTableAlertBackground.png"] stretchableImageWithLeftCapWidth:15 topCapHeight:30]];
|
||||||
|
[self.alertBg addSubview:alertBgImage];
|
||||||
|
|
||||||
|
// alert title creation
|
||||||
|
self.titleLabel = [[UILabel alloc] initWithFrame:CGRectZero];
|
||||||
|
self.titleLabel.backgroundColor = [UIColor clearColor];
|
||||||
|
self.titleLabel.textColor = [UIColor whiteColor];
|
||||||
|
self.titleLabel.shadowColor = [[UIColor blackColor] colorWithAlphaComponent:0.75];
|
||||||
|
self.titleLabel.shadowOffset = CGSizeMake(0, -1);
|
||||||
|
self.titleLabel.font = [UIFont boldSystemFontOfSize:18.0];
|
||||||
|
self.titleLabel.frame = CGRectMake(kLateralInset, 15, kTableAlertWidth - kLateralInset * 2, 22);
|
||||||
|
self.titleLabel.text = self.title;
|
||||||
|
self.titleLabel.textAlignment = NSTextAlignmentCenter;
|
||||||
|
[self.alertBg addSubview:self.titleLabel];
|
||||||
|
|
||||||
|
// table view creation
|
||||||
|
self.table = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
|
||||||
|
self.table.frame = CGRectMake(kLateralInset, self.titleLabel.frame.origin.y + self.titleLabel.frame.size.height + kTitleLabelMargin, kTableAlertWidth - kLateralInset * 2, (self.height - kVerticalInset * 2) - self.titleLabel.frame.origin.y - self.titleLabel.frame.size.height - kTitleLabelMargin - kCancelButtonMargin - kCancelButtonHeight);
|
||||||
|
self.table.layer.cornerRadius = 6.0;
|
||||||
|
self.table.layer.masksToBounds = YES;
|
||||||
|
self.table.delegate = self;
|
||||||
|
self.table.dataSource = self;
|
||||||
|
self.table.separatorStyle = UITableViewCellSeparatorStyleNone;
|
||||||
|
self.table.backgroundView = [[UIView alloc] init];
|
||||||
|
[self.alertBg addSubview:self.table];
|
||||||
|
|
||||||
|
// setting white-to-gray gradient as table view's background
|
||||||
|
CAGradientLayer *tableGradient = [CAGradientLayer layer];
|
||||||
|
tableGradient.frame = CGRectMake(0, 0, self.table.frame.size.width, self.table.frame.size.height);
|
||||||
|
tableGradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:240.0/255.0 green:240.0/255.0 blue:240.0/255.0 alpha:1.0] CGColor], (id)[[UIColor colorWithRed:174.0/255.0 green:174.0/255.0 blue:174.0/255.0 alpha:1.0] CGColor], nil];
|
||||||
|
[self.table.backgroundView.layer insertSublayer:tableGradient atIndex:0];
|
||||||
|
|
||||||
|
// adding inner shadow mask on table view
|
||||||
|
UIImageView *maskShadow = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"MLTableAlertShadowMask.png"] stretchableImageWithLeftCapWidth:6 topCapHeight:7]];
|
||||||
|
maskShadow.userInteractionEnabled = NO;
|
||||||
|
maskShadow.layer.masksToBounds = YES;
|
||||||
|
maskShadow.layer.cornerRadius = 5.0;
|
||||||
|
maskShadow.frame = self.table.frame;
|
||||||
|
[self.alertBg addSubview:maskShadow];
|
||||||
|
|
||||||
|
// cancel button creation
|
||||||
|
self.cancelButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||||
|
self.cancelButton.frame = CGRectMake(kLateralInset, self.table.frame.origin.y + self.table.frame.size.height + kCancelButtonMargin, kTableAlertWidth - kLateralInset * 2, kCancelButtonHeight);
|
||||||
|
self.cancelButton.titleLabel.textAlignment = NSTextAlignmentCenter;
|
||||||
|
self.cancelButton.titleLabel.font = [UIFont boldSystemFontOfSize:17.0];
|
||||||
|
self.cancelButton.titleLabel.shadowOffset = CGSizeMake(0, -1);
|
||||||
|
self.cancelButton.titleLabel.shadowColor = [[UIColor blackColor] colorWithAlphaComponent:0.75];
|
||||||
|
[self.cancelButton setTitle:self.cancelButtonTitle forState:UIControlStateNormal];
|
||||||
|
[self.cancelButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
|
||||||
|
[self.cancelButton setBackgroundColor:[UIColor clearColor]];
|
||||||
|
[self.cancelButton setBackgroundImage:[[UIImage imageNamed:@"MLTableAlertButton.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:0] forState:UIControlStateNormal];
|
||||||
|
[self.cancelButton setBackgroundImage:[[UIImage imageNamed:@"MLTableAlertButtonPressed.png"] stretchableImageWithLeftCapWidth:5 topCapHeight:0] forState:UIControlStateHighlighted];
|
||||||
|
self.cancelButton.opaque = NO;
|
||||||
|
self.cancelButton.layer.cornerRadius = 5.0;
|
||||||
|
[self.cancelButton addTarget:self action:@selector(dismissTableAlert) forControlEvents:UIControlEventTouchUpInside];
|
||||||
|
[self.alertBg addSubview:self.cancelButton];
|
||||||
|
|
||||||
|
// setting alert and alert background image frames
|
||||||
|
self.alertBg.frame = CGRectMake((self.frame.size.width - kTableAlertWidth) / 2, (self.frame.size.height - self.height) / 2, kTableAlertWidth, self.height - kVerticalInset * 2);
|
||||||
|
alertBgImage.frame = CGRectMake(0.0, 0.0, kTableAlertWidth, self.height);
|
||||||
|
|
||||||
|
// the alert will be the first responder so any other controls,
|
||||||
|
// like the keyboard, will be dismissed before the alert
|
||||||
|
[self becomeFirstResponder];
|
||||||
|
|
||||||
|
// show the alert with animation
|
||||||
|
[self animateIn];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)dismissTableAlert
|
||||||
|
{
|
||||||
|
// dismiss the alert with its animation
|
||||||
|
[self animateOut];
|
||||||
|
|
||||||
|
// perform actions contained in completionBlock if the
|
||||||
|
// cancel button of the alert has been pressed
|
||||||
|
// if completionBlock == nil, nothing is performed
|
||||||
|
if (self.completionBlock != nil)
|
||||||
|
if (!self.cellSelected)
|
||||||
|
self.completionBlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allows the alert to be first responder
|
||||||
|
-(BOOL)canBecomeFirstResponder
|
||||||
|
{
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Alert height setter
|
||||||
|
-(void)setHeight:(CGFloat)height
|
||||||
|
{
|
||||||
|
if (height > kMinAlertHeight)
|
||||||
|
_height = height;
|
||||||
|
else
|
||||||
|
_height = kMinAlertHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - UITableViewDataSource
|
||||||
|
|
||||||
|
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
|
||||||
|
{
|
||||||
|
// TODO: Allow multiple sections
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
||||||
|
{
|
||||||
|
// according to the numberOfRows block code
|
||||||
|
return self.numberOfRows(section);
|
||||||
|
}
|
||||||
|
|
||||||
|
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
||||||
|
{
|
||||||
|
// according to the cells block code
|
||||||
|
return self.cells(self, indexPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma mark - UITableViewDelegate
|
||||||
|
|
||||||
|
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||||
|
{
|
||||||
|
[tableView deselectRowAtIndexPath:indexPath animated:YES];
|
||||||
|
|
||||||
|
// set cellSelected to YES so the completionBlock won't be
|
||||||
|
// executed because a cell has been pressed instead of the cancel button
|
||||||
|
self.cellSelected = YES;
|
||||||
|
// dismiss the alert
|
||||||
|
[self dismissTableAlert];
|
||||||
|
|
||||||
|
// perform actions contained in the selectionBlock if it isn't nil
|
||||||
|
// add pass the selected indexPath
|
||||||
|
if (self.selectionBlock != nil)
|
||||||
|
self.selectionBlock(indexPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
|
@ -12,6 +12,16 @@
|
||||||
2B62D0E31796A15C00AC3C19 /* OZLProjectCreateViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2B62D0E21796A15C00AC3C19 /* OZLProjectCreateViewController.storyboard */; };
|
2B62D0E31796A15C00AC3C19 /* OZLProjectCreateViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2B62D0E21796A15C00AC3C19 /* OZLProjectCreateViewController.storyboard */; };
|
||||||
2B62D0E51796A8C800AC3C19 /* OZLIssueFilterViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2B62D0E41796A8C800AC3C19 /* OZLIssueFilterViewController.storyboard */; };
|
2B62D0E51796A8C800AC3C19 /* OZLIssueFilterViewController.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2B62D0E41796A8C800AC3C19 /* OZLIssueFilterViewController.storyboard */; };
|
||||||
2B62D0E81796A8D800AC3C19 /* OZLIssueFilterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B62D0E71796A8D800AC3C19 /* OZLIssueFilterViewController.m */; };
|
2B62D0E81796A8D800AC3C19 /* OZLIssueFilterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B62D0E71796A8D800AC3C19 /* OZLIssueFilterViewController.m */; };
|
||||||
|
2B6F382F1797A00A00D06F51 /* MLTableAlertBackground.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B6F38251797A00A00D06F51 /* MLTableAlertBackground.png */; };
|
||||||
|
2B6F38301797A00A00D06F51 /* MLTableAlertBackground@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B6F38261797A00A00D06F51 /* MLTableAlertBackground@2x.png */; };
|
||||||
|
2B6F38311797A00A00D06F51 /* MLTableAlertButton.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B6F38271797A00A00D06F51 /* MLTableAlertButton.png */; };
|
||||||
|
2B6F38321797A00A00D06F51 /* MLTableAlertButton@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B6F38281797A00A00D06F51 /* MLTableAlertButton@2x.png */; };
|
||||||
|
2B6F38331797A00A00D06F51 /* MLTableAlertButtonPressed.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B6F38291797A00A00D06F51 /* MLTableAlertButtonPressed.png */; };
|
||||||
|
2B6F38341797A00A00D06F51 /* MLTableAlertButtonPressed@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B6F382A1797A00A00D06F51 /* MLTableAlertButtonPressed@2x.png */; };
|
||||||
|
2B6F38351797A00A00D06F51 /* MLTableAlertShadowMask.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B6F382B1797A00A00D06F51 /* MLTableAlertShadowMask.png */; };
|
||||||
|
2B6F38361797A00A00D06F51 /* MLTableAlertShadowMask@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 2B6F382C1797A00A00D06F51 /* MLTableAlertShadowMask@2x.png */; };
|
||||||
|
2B6F38371797A00A00D06F51 /* MLTableAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B6F382E1797A00A00D06F51 /* MLTableAlert.m */; };
|
||||||
|
2B6F38391797BEBA00D06F51 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B6F38381797BEBA00D06F51 /* QuartzCore.framework */; };
|
||||||
2B8A11E217963CE500906D34 /* OZLIssueDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B8A11E117963CE500906D34 /* OZLIssueDetailViewController.m */; };
|
2B8A11E217963CE500906D34 /* OZLIssueDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B8A11E117963CE500906D34 /* OZLIssueDetailViewController.m */; };
|
||||||
2B9968AB1794F71B0086F115 /* OZLModelIssueCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B9968AA1794F71B0086F115 /* OZLModelIssueCategory.m */; };
|
2B9968AB1794F71B0086F115 /* OZLModelIssueCategory.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B9968AA1794F71B0086F115 /* OZLModelIssueCategory.m */; };
|
||||||
2B9968AF1794FC0A0086F115 /* OZLProjectCreateViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B9968AD1794FC0A0086F115 /* OZLProjectCreateViewController.m */; };
|
2B9968AF1794FC0A0086F115 /* OZLProjectCreateViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B9968AD1794FC0A0086F115 /* OZLProjectCreateViewController.m */; };
|
||||||
|
@ -69,6 +79,17 @@
|
||||||
2B62D0E41796A8C800AC3C19 /* OZLIssueFilterViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = OZLIssueFilterViewController.storyboard; path = ViewControllers/OZLIssueFilterViewController.storyboard; sourceTree = "<group>"; };
|
2B62D0E41796A8C800AC3C19 /* OZLIssueFilterViewController.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = OZLIssueFilterViewController.storyboard; path = ViewControllers/OZLIssueFilterViewController.storyboard; sourceTree = "<group>"; };
|
||||||
2B62D0E61796A8D800AC3C19 /* OZLIssueFilterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OZLIssueFilterViewController.h; path = ViewControllers/OZLIssueFilterViewController.h; sourceTree = "<group>"; };
|
2B62D0E61796A8D800AC3C19 /* OZLIssueFilterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OZLIssueFilterViewController.h; path = ViewControllers/OZLIssueFilterViewController.h; sourceTree = "<group>"; };
|
||||||
2B62D0E71796A8D800AC3C19 /* OZLIssueFilterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OZLIssueFilterViewController.m; path = ViewControllers/OZLIssueFilterViewController.m; sourceTree = "<group>"; };
|
2B62D0E71796A8D800AC3C19 /* OZLIssueFilterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OZLIssueFilterViewController.m; path = ViewControllers/OZLIssueFilterViewController.m; sourceTree = "<group>"; };
|
||||||
|
2B6F38251797A00A00D06F51 /* MLTableAlertBackground.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = MLTableAlertBackground.png; sourceTree = "<group>"; };
|
||||||
|
2B6F38261797A00A00D06F51 /* MLTableAlertBackground@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MLTableAlertBackground@2x.png"; sourceTree = "<group>"; };
|
||||||
|
2B6F38271797A00A00D06F51 /* MLTableAlertButton.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = MLTableAlertButton.png; sourceTree = "<group>"; };
|
||||||
|
2B6F38281797A00A00D06F51 /* MLTableAlertButton@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MLTableAlertButton@2x.png"; sourceTree = "<group>"; };
|
||||||
|
2B6F38291797A00A00D06F51 /* MLTableAlertButtonPressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = MLTableAlertButtonPressed.png; sourceTree = "<group>"; };
|
||||||
|
2B6F382A1797A00A00D06F51 /* MLTableAlertButtonPressed@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MLTableAlertButtonPressed@2x.png"; sourceTree = "<group>"; };
|
||||||
|
2B6F382B1797A00A00D06F51 /* MLTableAlertShadowMask.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = MLTableAlertShadowMask.png; sourceTree = "<group>"; };
|
||||||
|
2B6F382C1797A00A00D06F51 /* MLTableAlertShadowMask@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MLTableAlertShadowMask@2x.png"; sourceTree = "<group>"; };
|
||||||
|
2B6F382D1797A00A00D06F51 /* MLTableAlert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MLTableAlert.h; sourceTree = "<group>"; };
|
||||||
|
2B6F382E1797A00A00D06F51 /* MLTableAlert.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MLTableAlert.m; sourceTree = "<group>"; };
|
||||||
|
2B6F38381797BEBA00D06F51 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
||||||
2B8A11E017963CE500906D34 /* OZLIssueDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OZLIssueDetailViewController.h; path = ViewControllers/OZLIssueDetailViewController.h; sourceTree = "<group>"; };
|
2B8A11E017963CE500906D34 /* OZLIssueDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OZLIssueDetailViewController.h; path = ViewControllers/OZLIssueDetailViewController.h; sourceTree = "<group>"; };
|
||||||
2B8A11E117963CE500906D34 /* OZLIssueDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OZLIssueDetailViewController.m; path = ViewControllers/OZLIssueDetailViewController.m; sourceTree = "<group>"; };
|
2B8A11E117963CE500906D34 /* OZLIssueDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OZLIssueDetailViewController.m; path = ViewControllers/OZLIssueDetailViewController.m; sourceTree = "<group>"; };
|
||||||
2B9968A91794F71B0086F115 /* OZLModelIssueCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OZLModelIssueCategory.h; path = Models/OZLModelIssueCategory.h; sourceTree = "<group>"; };
|
2B9968A91794F71B0086F115 /* OZLModelIssueCategory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OZLModelIssueCategory.h; path = Models/OZLModelIssueCategory.h; sourceTree = "<group>"; };
|
||||||
|
@ -162,6 +183,7 @@
|
||||||
isa = PBXFrameworksBuildPhase;
|
isa = PBXFrameworksBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
2B6F38391797BEBA00D06F51 /* QuartzCore.framework in Frameworks */,
|
||||||
2BCF88141793CB94006FC859 /* SystemConfiguration.framework in Frameworks */,
|
2BCF88141793CB94006FC859 /* SystemConfiguration.framework in Frameworks */,
|
||||||
2BCF88121793CB4F006FC859 /* CFNetwork.framework in Frameworks */,
|
2BCF88121793CB4F006FC859 /* CFNetwork.framework in Frameworks */,
|
||||||
D5DB805A1792F2BF0081662A /* UIKit.framework in Frameworks */,
|
D5DB805A1792F2BF0081662A /* UIKit.framework in Frameworks */,
|
||||||
|
@ -173,6 +195,31 @@
|
||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
|
2B6F38231797A00A00D06F51 /* MLTableAlert */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
2B6F38241797A00A00D06F51 /* Images */,
|
||||||
|
2B6F382D1797A00A00D06F51 /* MLTableAlert.h */,
|
||||||
|
2B6F382E1797A00A00D06F51 /* MLTableAlert.m */,
|
||||||
|
);
|
||||||
|
path = MLTableAlert;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
2B6F38241797A00A00D06F51 /* Images */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
2B6F38251797A00A00D06F51 /* MLTableAlertBackground.png */,
|
||||||
|
2B6F38261797A00A00D06F51 /* MLTableAlertBackground@2x.png */,
|
||||||
|
2B6F38271797A00A00D06F51 /* MLTableAlertButton.png */,
|
||||||
|
2B6F38281797A00A00D06F51 /* MLTableAlertButton@2x.png */,
|
||||||
|
2B6F38291797A00A00D06F51 /* MLTableAlertButtonPressed.png */,
|
||||||
|
2B6F382A1797A00A00D06F51 /* MLTableAlertButtonPressed@2x.png */,
|
||||||
|
2B6F382B1797A00A00D06F51 /* MLTableAlertShadowMask.png */,
|
||||||
|
2B6F382C1797A00A00D06F51 /* MLTableAlertShadowMask@2x.png */,
|
||||||
|
);
|
||||||
|
path = Images;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
2BCB50FD1796370F006845AC /* Views */ = {
|
2BCB50FD1796370F006845AC /* Views */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -254,6 +301,7 @@
|
||||||
D5DB80581792F2BF0081662A /* Frameworks */ = {
|
D5DB80581792F2BF0081662A /* Frameworks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
2B6F38381797BEBA00D06F51 /* QuartzCore.framework */,
|
||||||
2BCF88131793CB94006FC859 /* SystemConfiguration.framework */,
|
2BCF88131793CB94006FC859 /* SystemConfiguration.framework */,
|
||||||
2BCF88111793CB4F006FC859 /* CFNetwork.framework */,
|
2BCF88111793CB4F006FC859 /* CFNetwork.framework */,
|
||||||
D5DB80591792F2BF0081662A /* UIKit.framework */,
|
D5DB80591792F2BF0081662A /* UIKit.framework */,
|
||||||
|
@ -294,6 +342,7 @@
|
||||||
D5DB80761792F3EE0081662A /* Libs */ = {
|
D5DB80761792F3EE0081662A /* Libs */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
2B6F38231797A00A00D06F51 /* MLTableAlert */,
|
||||||
2BCF880D1793ABA0006FC859 /* Reachability */,
|
2BCF880D1793ABA0006FC859 /* Reachability */,
|
||||||
2BCF88091793A26A006FC859 /* MBProgressHUD */,
|
2BCF88091793A26A006FC859 /* MBProgressHUD */,
|
||||||
D5DB80771792F3EE0081662A /* AFNetworking */,
|
D5DB80771792F3EE0081662A /* AFNetworking */,
|
||||||
|
@ -471,6 +520,14 @@
|
||||||
2B62D0E1179649A800AC3C19 /* OZLIssueDetailViewController.storyboard in Resources */,
|
2B62D0E1179649A800AC3C19 /* OZLIssueDetailViewController.storyboard in Resources */,
|
||||||
2B62D0E31796A15C00AC3C19 /* OZLProjectCreateViewController.storyboard in Resources */,
|
2B62D0E31796A15C00AC3C19 /* OZLProjectCreateViewController.storyboard in Resources */,
|
||||||
2B62D0E51796A8C800AC3C19 /* OZLIssueFilterViewController.storyboard in Resources */,
|
2B62D0E51796A8C800AC3C19 /* OZLIssueFilterViewController.storyboard in Resources */,
|
||||||
|
2B6F382F1797A00A00D06F51 /* MLTableAlertBackground.png in Resources */,
|
||||||
|
2B6F38301797A00A00D06F51 /* MLTableAlertBackground@2x.png in Resources */,
|
||||||
|
2B6F38311797A00A00D06F51 /* MLTableAlertButton.png in Resources */,
|
||||||
|
2B6F38321797A00A00D06F51 /* MLTableAlertButton@2x.png in Resources */,
|
||||||
|
2B6F38331797A00A00D06F51 /* MLTableAlertButtonPressed.png in Resources */,
|
||||||
|
2B6F38341797A00A00D06F51 /* MLTableAlertButtonPressed@2x.png in Resources */,
|
||||||
|
2B6F38351797A00A00D06F51 /* MLTableAlertShadowMask.png in Resources */,
|
||||||
|
2B6F38361797A00A00D06F51 /* MLTableAlertShadowMask@2x.png in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -517,6 +574,7 @@
|
||||||
2BCCA0541795312E00FA8B1A /* OZLConstants.m in Sources */,
|
2BCCA0541795312E00FA8B1A /* OZLConstants.m in Sources */,
|
||||||
2B8A11E217963CE500906D34 /* OZLIssueDetailViewController.m in Sources */,
|
2B8A11E217963CE500906D34 /* OZLIssueDetailViewController.m in Sources */,
|
||||||
2B62D0E81796A8D800AC3C19 /* OZLIssueFilterViewController.m in Sources */,
|
2B62D0E81796A8D800AC3C19 /* OZLIssueFilterViewController.m in Sources */,
|
||||||
|
2B6F38371797A00A00D06F51 /* MLTableAlert.m in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
|
|
@ -35,6 +35,8 @@
|
||||||
@property(nonatomic,strong) NSString* description;
|
@property(nonatomic,strong) NSString* description;
|
||||||
@property(nonatomic,strong) NSString* name;
|
@property(nonatomic,strong) NSString* name;
|
||||||
@property(nonatomic) int parentId;
|
@property(nonatomic) int parentId;
|
||||||
|
@property(nonatomic) BOOL isPublic;
|
||||||
|
@property(nonatomic,strong) NSString* homepage;
|
||||||
@property(nonatomic,strong) NSString* createdOn;
|
@property(nonatomic,strong) NSString* createdOn;
|
||||||
@property(nonatomic,strong) NSString* updatedOn;
|
@property(nonatomic,strong) NSString* updatedOn;
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
_identifier = [dic objectForKey:@"identifier"];
|
_identifier = [dic objectForKey:@"identifier"];
|
||||||
_name = [dic objectForKey:@"name"];
|
_name = [dic objectForKey:@"name"];
|
||||||
_description = [dic objectForKey:@"description"];
|
_description = [dic objectForKey:@"description"];
|
||||||
|
_homepage = [dic objectForKey:@"homepage"];
|
||||||
_createdOn = [dic objectForKey:@"created_on"];
|
_createdOn = [dic objectForKey:@"created_on"];
|
||||||
_updatedOn = [dic objectForKey:@"updated_on"];
|
_updatedOn = [dic objectForKey:@"updated_on"];
|
||||||
NSDictionary* parent = [dic objectForKey:@"parent"];
|
NSDictionary* parent = [dic objectForKey:@"parent"];
|
||||||
|
@ -61,7 +62,10 @@
|
||||||
[projectDic setObject:_description forKey:@"description"];
|
[projectDic setObject:_description forKey:@"description"];
|
||||||
}
|
}
|
||||||
if (_parentId > 0) {
|
if (_parentId > 0) {
|
||||||
[projectDic setObject:[NSNumber numberWithInt:_parentId] forKey:@"parent"];
|
[projectDic setObject:[NSNumber numberWithInt:_parentId] forKey:@"parent_id"];
|
||||||
|
}
|
||||||
|
if (_homepage.length > 0) {
|
||||||
|
[projectDic setObject:_homepage forKey:@"homepage"];
|
||||||
}
|
}
|
||||||
|
|
||||||
return [[NSMutableDictionary alloc] initWithObjectsAndKeys:projectDic,@"project",nil];
|
return [[NSMutableDictionary alloc] initWithObjectsAndKeys:projectDic,@"project",nil];
|
||||||
|
|
|
@ -114,8 +114,7 @@
|
||||||
|
|
||||||
if (block) {
|
if (block) {
|
||||||
NSLog(@"the repsonse:%@",responseObject);
|
NSLog(@"the repsonse:%@",responseObject);
|
||||||
int repondNumber = [responseObject intValue];
|
block(YES,nil);
|
||||||
block(repondNumber == 201,nil);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
|
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
|
||||||
|
|
|
@ -7,9 +7,17 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
|
#import "OZLModelProject.h"
|
||||||
|
|
||||||
@interface OZLProjectCreateViewController : UITableViewController
|
@interface OZLProjectCreateViewController : UITableViewController
|
||||||
- (IBAction)onCancel:(id)sender;
|
- (IBAction)onCancel:(id)sender;
|
||||||
- (IBAction)onSave:(id)sender;
|
- (IBAction)onSave:(id)sender;
|
||||||
|
@property (weak, nonatomic) IBOutlet UITextField *name;
|
||||||
|
@property (weak, nonatomic) IBOutlet UITextField *identifier;
|
||||||
|
@property (weak, nonatomic) IBOutlet UITextField *homepageUrl;
|
||||||
|
@property (weak, nonatomic) IBOutlet UITextView *description;
|
||||||
|
@property (nonatomic) BOOL isPublic;
|
||||||
|
@property (nonatomic,strong) OZLModelProject* parentProject;
|
||||||
|
@property (nonatomic,strong) NSArray* projectList;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -7,8 +7,14 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "OZLProjectCreateViewController.h"
|
#import "OZLProjectCreateViewController.h"
|
||||||
|
#import "MBProgressHUD.h"
|
||||||
|
#import "OZLNetwork.h"
|
||||||
|
#import "MLTableAlert.h"
|
||||||
|
|
||||||
@interface OZLProjectCreateViewController ()
|
@interface OZLProjectCreateViewController () {
|
||||||
|
MBProgressHUD * _HUD;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@ -31,6 +37,11 @@
|
||||||
[self.navigationItem setLeftBarButtonItem:cancelBtn];
|
[self.navigationItem setLeftBarButtonItem:cancelBtn];
|
||||||
UIBarButtonItem* saveBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(onSave:)];
|
UIBarButtonItem* saveBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(onSave:)];
|
||||||
[self.navigationItem setRightBarButtonItem:saveBtn];
|
[self.navigationItem setRightBarButtonItem:saveBtn];
|
||||||
|
|
||||||
|
|
||||||
|
_HUD = [[MBProgressHUD alloc] initWithView:self.view];
|
||||||
|
[self.view addSubview:_HUD];
|
||||||
|
_HUD.labelText = @"Loading...";
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)didReceiveMemoryWarning
|
- (void)didReceiveMemoryWarning
|
||||||
|
@ -45,6 +56,99 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)onSave:(id)sender {
|
- (IBAction)onSave:(id)sender {
|
||||||
|
|
||||||
|
if (_name.text.length == 0) {
|
||||||
|
_HUD.mode = MBProgressHUDModeText;
|
||||||
|
_HUD.labelText = @"Project name can not be empty.";
|
||||||
|
[_HUD show:YES];
|
||||||
|
[_HUD hide:YES afterDelay:1];
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (_identifier.text.length == 0) {
|
||||||
|
_HUD.mode = MBProgressHUDModeText;
|
||||||
|
_HUD.labelText = @"Project identifier can not be empty.";
|
||||||
|
[_HUD show:YES];
|
||||||
|
[_HUD hide:YES afterDelay:1];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
OZLModelProject* projectData = [[OZLModelProject alloc] init];
|
||||||
|
projectData.name = _name.text;
|
||||||
|
projectData.identifier = _identifier.text;
|
||||||
|
//TODO: is_public is not processed yet
|
||||||
|
|
||||||
|
projectData.description = _description.text;
|
||||||
|
projectData.homepage = _homepageUrl.text;
|
||||||
|
if (_parentProject) {
|
||||||
|
projectData.parentId = _parentProject.index;
|
||||||
|
}
|
||||||
|
|
||||||
|
_HUD.mode = MBProgressHUDModeIndeterminate;
|
||||||
|
_HUD.labelText = @"Creating Project...";
|
||||||
|
[_HUD show:YES];
|
||||||
|
[OZLNetwork createProject:projectData withParams:nil andBlock:^(BOOL success, NSError *error) {
|
||||||
|
if (error) {
|
||||||
|
NSLog(@"create project error: %@",error.description);
|
||||||
|
}else {
|
||||||
|
|
||||||
|
}
|
||||||
|
[_HUD hide:YES];
|
||||||
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)viewDidUnload {
|
||||||
|
[self setName:nil];
|
||||||
|
[self setIdentifier:nil];
|
||||||
|
[self setHomepageUrl:nil];
|
||||||
|
[self setDescription:nil];
|
||||||
|
[super viewDidUnload];
|
||||||
|
}
|
||||||
|
|
||||||
|
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||||
|
{
|
||||||
|
if (indexPath.section ==0 && indexPath.row == 4) {//parent project
|
||||||
|
// create the alert
|
||||||
|
MLTableAlert* tableAlert = [MLTableAlert tableAlertWithTitle:@"Parent Project" cancelButtonTitle:@"Cancel" numberOfRows:^NSInteger (NSInteger section)
|
||||||
|
{
|
||||||
|
return _projectList.count;
|
||||||
|
}
|
||||||
|
andCells:^UITableViewCell* (MLTableAlert *anAlert, NSIndexPath *indexPath)
|
||||||
|
{
|
||||||
|
static NSString *CellIdentifier = @"CellIdentifier";
|
||||||
|
UITableViewCell *cell = [anAlert.table dequeueReusableCellWithIdentifier:CellIdentifier];
|
||||||
|
if (cell == nil)
|
||||||
|
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
|
||||||
|
|
||||||
|
if (indexPath.row == 0) {
|
||||||
|
cell.textLabel.text = @"None";
|
||||||
|
}else {
|
||||||
|
cell.textLabel.text = [[_projectList objectAtIndex:indexPath.row - 1] name];
|
||||||
|
}
|
||||||
|
return cell;
|
||||||
|
}];
|
||||||
|
|
||||||
|
// Setting custom alert height
|
||||||
|
tableAlert.height = 350;
|
||||||
|
|
||||||
|
// configure actions to perform
|
||||||
|
[tableAlert configureSelectionBlock:^(NSIndexPath *selectedIndex){
|
||||||
|
UITableViewCell* parentCell = [self.tableView cellForRowAtIndexPath:indexPath];
|
||||||
|
if (selectedIndex.row == 0) {
|
||||||
|
_parentProject = nil;
|
||||||
|
parentCell.detailTextLabel.text = @"None";
|
||||||
|
}else {
|
||||||
|
_parentProject = [_projectList objectAtIndex:selectedIndex.row - 1];
|
||||||
|
parentCell.detailTextLabel.text = _parentProject.name;
|
||||||
|
}
|
||||||
|
[parentCell.detailTextLabel sizeToFit];
|
||||||
|
} andCompletionBlock:^{
|
||||||
|
|
||||||
|
}];
|
||||||
|
|
||||||
|
// show the alert
|
||||||
|
[tableAlert show];
|
||||||
|
}
|
||||||
|
}
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -112,7 +112,7 @@
|
||||||
<color key="textColor" red="0.32156862745098042" green="0.40000000000000002" blue="0.56862745098039214" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="textColor" red="0.32156862745098042" green="0.40000000000000002" blue="0.56862745098039214" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
<color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="Detail" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MoA-o2-yxn">
|
<label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="None" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="MoA-o2-yxn">
|
||||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
||||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
<color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
<color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||||
|
@ -158,6 +158,12 @@
|
||||||
</connections>
|
</connections>
|
||||||
</tableView>
|
</tableView>
|
||||||
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
|
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
|
||||||
|
<connections>
|
||||||
|
<outlet property="description" destination="AT8-cJ-4t0" id="Rsn-N4-neo"/>
|
||||||
|
<outlet property="homepageUrl" destination="Wxn-cY-Rz5" id="AOY-OA-hUq"/>
|
||||||
|
<outlet property="identifier" destination="w24-vv-ngl" id="PFN-kY-lkq"/>
|
||||||
|
<outlet property="name" destination="WVH-aU-Pta" id="eg9-ak-RD6"/>
|
||||||
|
</connections>
|
||||||
</tableViewController>
|
</tableViewController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="K4U-Yd-PmB" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="K4U-Yd-PmB" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
|
@ -173,6 +179,10 @@
|
||||||
<relationships>
|
<relationships>
|
||||||
<relationship kind="action" name="onCancel:"/>
|
<relationship kind="action" name="onCancel:"/>
|
||||||
<relationship kind="action" name="onSave:"/>
|
<relationship kind="action" name="onSave:"/>
|
||||||
|
<relationship kind="outlet" name="description" candidateClass="UITextView"/>
|
||||||
|
<relationship kind="outlet" name="homepageUrl" candidateClass="UITextField"/>
|
||||||
|
<relationship kind="outlet" name="identifier" candidateClass="UITextField"/>
|
||||||
|
<relationship kind="outlet" name="name" candidateClass="UITextField"/>
|
||||||
</relationships>
|
</relationships>
|
||||||
</class>
|
</class>
|
||||||
</classes>
|
</classes>
|
||||||
|
|
|
@ -122,6 +122,7 @@
|
||||||
//[self.navigationController presentModalViewController:creator animated:YES];
|
//[self.navigationController presentModalViewController:creator animated:YES];
|
||||||
UIStoryboard *tableViewStoryboard = [UIStoryboard storyboardWithName:@"OZLProjectCreateViewController" bundle:nil];
|
UIStoryboard *tableViewStoryboard = [UIStoryboard storyboardWithName:@"OZLProjectCreateViewController" bundle:nil];
|
||||||
OZLProjectCreateViewController* creator = [tableViewStoryboard instantiateViewControllerWithIdentifier:@"OZLProjectCreateViewController"];
|
OZLProjectCreateViewController* creator = [tableViewStoryboard instantiateViewControllerWithIdentifier:@"OZLProjectCreateViewController"];
|
||||||
|
[creator setProjectList:_projectList];
|
||||||
[self.navigationController pushViewController:creator animated:YES];
|
[self.navigationController pushViewController:creator animated:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|