信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

LIST OF ARTICLES

記事一覧

  • テクログ

    Objective-C | Push遷移とModal遷移を混在させて、さらに前の画面を透過させる

    先日、新規アプリが無事リリースされました 消費税相互変換電卓 一発消費ゼータくんです。 ↓ 詳しくは画像をクリックしてね! Mac,iPhone,Objective-C 全て利用歴6ヶ月の新米プログラマーが送る 自分が使って役立ったmethod&Tips集 シリーズ第25弾です。 参考場所はありますが単なるコピペを紹介してるわけではありません。 ちゃんと自前で作ってます。(謎のアピール) さて今回は大物です。 Navigation Controllerで接続された画面は普通にやるとPush遷移とModal遷移は混在出来ません。 しかしコードから呼ぶことによりモーダル画面に遷移が可能です。 ただコード書いただけだと画面がパッと出てきてしまい違和感バリバリです、画面表示時にアニメーション効果を追加してます。 何故こんな面倒なことをするかというと、画面を透過させる効果を利用したかったからです。 今回は準備が大変です。 1.Single View Applicateionで新たにProjectを作成。 2.UINavigationControllerをStoryBoard上にドラッグ。 3.青枠で囲われたTableViewをDel。 4.残ったNavigation Controller をcontrol押しながら元からあるViewに接続、そして接続方法はroot viewを選ぶ。 5.UIViewControllerをStoryBoard上にドラッグ。 6.それぞれの画面にボタン配置。 7.色を変える最初の画面と次の画面はsegueで接続しません。 8.File→New→FileObjective-C classを選んでNextボタン Class:NextViewController  Subclass of:UIViewController。 9.segueで接続しなかった画面のプロパティを設定。 ここで設定したStoryBoardIDを画面呼び出しに利用します。 準備おわり。ソースが用意出来ればこんな面倒なこと書かなくていいんですけどねぇ。 ViewController.h は変更ありません 次の画面に遷移する用のボタンと、次の画面の先ほど作成したクラスを呼ぶようにしてます。 ViewController.m #import "ViewController.h" #import "NextViewController.h" @interface ViewController () - (IBAction)nextScreen:(id)sender; @end @implementation ViewController - (void)viewDidLoad {     [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning {     [super didReceiveMemoryWarning];     // Dispose of any resources that can be recreated. } - (IBAction)nextScreen:(id)sender {     //modalviewの背景を透明にする     // 画面遷移エフェクトがなくなるので、そこは独自実装 モーダルビューのviewDidAppear:(BOOL)animatedに記述     self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;               // モーダルで表示     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];     // Storyboard ID を指定して画面遷移     NextViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"NextScreen"];     // controllerにNavigationController を新たに付与     UINavigationController* nc = [[UINavigationController alloc] initWithRootViewController:controller];     // 画面遷移のアニメーションを設定     nc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;     // UINavigationControllerに向けてモーダルで画面遷移     [self presentViewController:nc animated:NO completion:nil];      } @end NextViewController.h は変更ありません NextViewController.m #import "NextViewController.h" @interface NextViewController () - (IBAction)returnScreen:(id)sender; @end @implementation NextViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];     if (self) {         // Custom initialization     }     return self; } - (void)viewDidLoad {     [super viewDidLoad];     // Do any additional setup after loading the view.     // 背景だけ透過     UIColor *alphaColor = [self.view.backgroundColor colorWithAlphaComponent:0.8]; //透過率     self.view.backgroundColor = alphaColor; } - (void)didReceiveMemoryWarning {     [super didReceiveMemoryWarning];     // Dispose of any resources that can be recreated. } -(void)viewDidAppear:(BOOL)animated {     // 半透明効果のせいでアニメーションしないので自前で書く         CGFloat h = [[UIScreen mainScreen] bounds].size.height;         CGFloat w = [[UIScreen mainScreen] bounds].size.width;         [UIView beginAnimations:nil context:nil];         [self.view setFrame:CGRectMake(0, h, w, h)];         [UIView setAnimationDuration:0.3f];         [self.view setFrame:CGRectMake(0, 0, w, h)];         [UIView commitAnimations];      } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {     // Get the new view controller using [segue destinationViewController].     // Pass the selected object to the new view controller. } */ - (IBAction)returnScreen:(id)sender {         [self.presentingViewController dismissViewControllerAnimated:YES completion:^{}]; } @end さらっと書いてますが、viewDidLoadでの記述している方法を使うことで、他の部品は透明になりません。 UIColor *alphaColor = [self.view.backgroundColor colorWithAlphaComponent:0.8]; //透過率 self.view.backgroundColor = alphaColor; プロパティで透過させると他の部品も全部透過します。 前の画面に戻る記述は定型文みたいなモンなので、覚えておけばどこでも使えます。 2画面前に戻るとかはまた違う話ですが。。。   そのほかのObjective-C関連の記事をお探しならコチラをどうぞ   弊社から出している拙作スケジュールのアプリです。 スケジュールというかちょっとした予定を入力して、社長、同僚、家族がどこ行った??っていうときに第三者が確認するためのアプリです 是非ダウンロードして感想をお聞かせ下さい。 『Team Scheduler』 概要 ▼アプリ価格: 無料 ▼対応OS: iOS(iPhone/iPod Touch)、Android ▼カテゴリ: 仕事効率化(App Store)、ビジネス(Google Play) ▼対応言語: 日本語 ▼推奨環境:  iOS版: iPhone4以降、iOS6. 0以降  Android版: Android OS 2. 3以降 ▼ダウンロード:    
  • テクログ

    Objective-C | リアルタイムで入力制限を行う

    先日、新規アプリが無事リリースされました 消費税相互変換電卓 一発消費ゼータくんです。 ↓ 詳しくは画像をクリックしてね! Mac,iPhone,Objective-C 全て利用歴6ヶ月の新米プログラマーが送る 自分が使って役立ったmethod&Tips集 シリーズ第24弾です。 参考場所はありますが単なるコピペを紹介してるわけではありません。 ちゃんと自前で作ってます。(謎のアピール) JavaScriptのように入力した文字を入力と同時に制限してみます。 StoryBoard上にUITextField を配置してください。 ViewController.h #import  @interface ViewController : UIViewController @end サンプルでは、スペースを入力不可にして、15文字以上入れられないようにしてます。 ViewController.m #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {     [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.     for (id v in self.view.subviews) {         if([NSStringFromClass([v class]) isEqualToString:@"UITextField"]){             ((UITextField*)v).delegate = self;         }     } } - (void)didReceiveMemoryWarning {     [super didReceiveMemoryWarning];     // Dispose of any resources that can be recreated. } // 入力文字数を制限する - (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {     //space remove     if (![string compare:@" "]) {         return NO;     }          BOOL isLengthLimit;          // 変更前のtextを取得     NSMutableString *tmp =[textField.text mutableCopy];     // 編集後のtext     [tmp replaceCharactersInRange:range withString:string];          // sjis code 15 文字以下     isLengthLimit = [tmp lengthOfBytesUsingEncoding:NSShiftJISStringEncoding] <=15;     return  isLengthLimit; } @end 今回入力エリアをプロパティ接続してません。 View上のUITextFieldを高速列挙で探してDelegateを設定してます。 全部にセットするときはこの方法の方が、後で追加しても漏れがありませんね。 更に入力制限は、 以前のエラーチェックを利用すると色々幅が広がると思います 回が進むと色々と組み合わせられるので楽になってきますね。   そのほかのObjective-C関連の記事をお探しならコチラをどうぞ   弊社から出している拙作スケジュールのアプリです。 スケジュールというかちょっとした予定を入力して、社長、同僚、家族がどこ行った??っていうときに第三者が確認するためのアプリです 是非ダウンロードして感想をお聞かせ下さい。 『Team Scheduler』 概要 ▼アプリ価格: 無料 ▼対応OS: iOS(iPhone/iPod Touch)、Android ▼カテゴリ: 仕事効率化(App Store)、ビジネス(Google Play) ▼対応言語: 日本語 ▼推奨環境:  iOS版: iPhone4以降、iOS6. 0以降  Android版: Android OS 2. 3以降 ▼ダウンロード:    
  • テクログ

    Objective-C | 入力欄をスクロールさせてキーボードの上に出す

    先日、新規アプリが無事リリースされました 消費税相互変換電卓 一発消費ゼータくんです。 ↓ 詳しくは画像をクリックしてね! Mac,iPhone,Objective-C 全て利用歴6ヶ月の新米プログラマーが送る 自分が使って役立ったmethod&Tips集 シリーズ第23弾です。 参考場所はありますが単なるコピペを紹介してるわけではありません。 ちゃんと自前で作ってます。(謎のアピール) Objective-Cでビックリしたことの一つに入力欄をタップしてキーボード表示した後その場所がスクロールしないということがあります。 Androidは自動で移動するのに。。。 同じような書き出しですが気にしないw こんな感じでUITextField を配置します。 下の入力欄をタップするとキーボードで隠れてしまう。 あ、画面ではわかりませんが、UIScrollViewの上に乗っかってます(重要)。 UIScrollViewを持ち上げることで入力欄が上がって見えるようにしてます。 手順です。 StoryBoard上から必要な項目をソースにドラッグしてください。 確認のためキーボード引っ込む処理も入れてます。 ViewController.h #import  @interface ViewController : UIViewController @end ViewController.m #import "ViewController.h" @interface ViewController () {     BOOL observing_;     UITextField *activeField;    //選択されたテキストフィールドを入れる } @property (weak, nonatomic) IBOutlet UIScrollView *scrollView; @property (weak, nonatomic) IBOutlet UITextField *text1; @property (weak, nonatomic) IBOutlet UITextField *text2; - (IBAction)bkgTapped:(id)sender; @end @implementation ViewController - (void)viewDidLoad {     [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.          // 全テキストフィールドのdelegateにselfを代入     // ※テキストフィールドをメンバ変数に入れている場合は、それぞれのテキストフィールドに対して、変数名.delegate = self;とすればいい。     for (id v in _scrollView.subviews) {         if([NSStringFromClass([v class]) isEqualToString:@"UITextField"]) {             ((UITextField*)v).delegate = self;         }         NSLog(@"%@", NSStringFromClass([v class]));     } } - (void)didReceiveMemoryWarning {     [super didReceiveMemoryWarning];     // Dispose of any resources that can be recreated. } - (void)viewWillAppear:(BOOL)animated {     // super     [super viewWillAppear:animated];          // Start observing     if (!observing_) {         NSNotificationCenter *center;         center = [NSNotificationCenter defaultCenter];         [center addObserver:self                    selector:@selector(keyboardWillShow:)                        name:UIKeyboardWillShowNotification                      object:nil];                  [center addObserver:self                    selector:@selector(keybaordWillHide:)                        name:UIKeyboardWillHideNotification                      object:nil];                  observing_ = YES;     } } #pragma mark my method - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{     // メンバ変数activeFieldに選択されたテキストフィールドを代入     activeField = textField;     return YES; } - (void)keyboardWillShow:(NSNotification*)notification {     // Get userInfo     NSDictionary *userInfo;     userInfo = [notification userInfo];          // キーボードの表示完了時の場所と大きさを取得。     CGRect keyboardFrameEnd = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];     CGRect screenBounds = [[UIScreen mainScreen] bounds];     float screenHeight = screenBounds.size.height;     if((activeField.frame.origin.y + activeField.frame.size.height)>(screenHeight - keyboardFrameEnd.size.height - 20)){      // テキストフィールドがキーボードで隠れるようなら         // 選択中のテキストフィールドの直ぐ下にキーボードの上端が付くように、スクロールビューの位置を上げる         [UIView animateWithDuration:0.3                          animations:^{                              _scrollView.frame = CGRectMake(0, screenHeight - activeField.frame.origin.y - activeField.frame.size.height - keyboardFrameEnd.size.height - 20, _scrollView.frame.size.width,_scrollView.frame.size.height);                          }];     } } - (void)keybaordWillHide:(NSNotification*)notification {     // viewのy座標を元に戻してキーボードをしまう     [UIView animateWithDuration:0.2                      animations:^{_scrollView.frame = CGRectMake(0, 0, _scrollView.frame.size.width,_scrollView.frame.size.height);                      }];     activeField = nil;     return; } // リターンキーでキーボードを閉じる。 delegate必須 - (BOOL)textFieldShouldReturn:(UITextField *)targetTextField {     // viewのy座標を元に戻してキーボードをしまう     [UIView animateWithDuration:0.2                      animations:^{_scrollView.frame = CGRectMake(0, 0, _scrollView.frame.size.width,_scrollView.frame.size.height);                      }];     [targetTextField resignFirstResponder];     return YES; } - (IBAction)bkgTapped:(id)sender {     // keyboard hide     [self.view endEditing:YES]; } @end ちゃんと上に来てます。入力欄以外をタップすると元に戻ります。戻った画像は一枚目と同じなので省略 こういう絶対使うやつが何で自前で用意されてないのか、その辺もObjective-Cが取っつきにくい原因の気がします。   そのほかのObjective-C関連の記事をお探しならコチラをどうぞ   弊社から出している拙作スケジュールのアプリです。 スケジュールというかちょっとした予定を入力して、社長、同僚、家族がどこ行った??っていうときに第三者が確認するためのアプリです 是非ダウンロードして感想をお聞かせ下さい。 『Team Scheduler』 概要 ▼アプリ価格: 無料 ▼対応OS: iOS(iPhone/iPod Touch)、Android ▼カテゴリ: 仕事効率化(App Store)、ビジネス(Google Play) ▼対応言語: 日本語 ▼推奨環境:  iOS版: iPhone4以降、iOS6. 0以降  Android版: Android OS 2. 3以降 ▼ダウンロード:    
  • テクログ

    Objective-C | タップでキーボードを引っ込める

    先日、新規アプリが無事リリースされました 消費税相互変換電卓 一発消費ゼータくんです。 ↓ 詳しくは画像をクリックしてね! Mac,iPhone,Objective-C 全て利用歴6ヶ月の新米プログラマーが送る 自分が使って役立ったmethod&Tips集 シリーズ第22弾です。 その前にお約束の表示ですよ。 参考場所はありますが単なるコピペを紹介してるわけではありません。 ちゃんと自前で作ってます。(謎のアピール) UITextViewで前回のリターンキーでキーボードが無くなる方法を使うと、改行の毎にキーボードが消えておかしな動作になります。 外側をタッチすると、キーボードが引っ込むようにします。 storyBoard上にUITTapGestureRecognizer設置しcontrolキーでソース上にドラッグします。 ドロップ後、出てきたダイアログにはConnection: Actionを選択、Name: bkgTapped とします。 前回のソースを修正します。 ViewController.h #import  @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *textBox; - (IBAction)bkgTapped:(id)sender; @end ViewController.m #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {     [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.     _textBox.delegate = self; } - (void)didReceiveMemoryWarning {     [super didReceiveMemoryWarning];     // Dispose of any resources that can be recreated. } - (BOOL)textFieldShouldReturn:(UITextField *)textField {     [self.view endEditing:YES];     return NO; // 改行無効 } - (IBAction)bkgTapped:(id)sender {     // keyboard hide     [self.view endEditing:YES]; } @end 以上   そのほかのObjective-C関連の記事をお探しならコチラをどうぞ   弊社から出している拙作スケジュールのアプリです。 スケジュールというかちょっとした予定を入力して、社長、同僚、家族がどこ行った??っていうときに第三者が確認するためのアプリです 是非ダウンロードして感想をお聞かせ下さい。 『Team Scheduler』 概要 ▼アプリ価格: 無料 ▼対応OS: iOS(iPhone/iPod Touch)、Android ▼カテゴリ: 仕事効率化(App Store)、ビジネス(Google Play) ▼対応言語: 日本語 ▼推奨環境:  iOS版: iPhone4以降、iOS6. 0以降  Android版: Android OS 2. 3以降 ▼ダウンロード:    
  • テクログ

    Objective-C | リターンキーでキーボードを引っ込める

    先日、新規アプリが無事リリースされました 消費税相互変換電卓 一発消費ゼータくんです。 ↓ 詳しくは画像をクリックしてね! Mac,iPhone,Objective-C 全て利用歴6ヶ月の新米プログラマーが送る 自分が使って役立ったmethod&Tips集 シリーズ第21弾です。 その前にお約束の表示ですよ。 参考場所はありますが単なるコピペを紹介してるわけではありません。 ちゃんと自前で作ってます。(謎のアピール) Objective-Cのコーディングでビックリしたことの一つにキーボードが自動で引っ込まないことです。 Androidは自動で引っ込むのに・・・。 入力キーボードが引っ込むのは当たり前に見かけますが、裏では職人が手作業で1画面1画面引っ込ませてるのです( ;∀;) 今回はUITeixtField専用ですが、リターンキーでキーボードを引っ込める方法です。 storyBoard上に設置したUITeixtFieldをcontrolキーで引き込んだ後の話です。 UITextFieldDelegate を利用してます ViewController.h #import  @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *textBox; @end ViewController.m #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {     [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.     _textBox.delegate = self; } - (void)didReceiveMemoryWarning {     [super didReceiveMemoryWarning];     // Dispose of any resources that can be recreated. } - (BOOL)textFieldShouldReturn:(UITextField *)textField{     [self.view endEditing:YES];     return NO; // 改行無効 } @end これでリターンを押すとキーボードが引っ込むようになります。   そのほかのObjective-C関連の記事をお探しならコチラをどうぞ   弊社から出している拙作スケジュールのアプリです。 スケジュールというかちょっとした予定を入力して、社長、同僚、家族がどこ行った??っていうときに第三者が確認するためのアプリです 是非ダウンロードして感想をお聞かせ下さい。 『Team Scheduler』 概要 ▼アプリ価格: 無料 ▼対応OS: iOS(iPhone/iPod Touch)、Android ▼カテゴリ: 仕事効率化(App Store)、ビジネス(Google Play) ▼対応言語: 日本語 ▼推奨環境:  iOS版: iPhone4以降、iOS6. 0以降  Android版: Android OS 2. 3以降 ▼ダウンロード:    
  • テクログ

    Objective-C | 数値、全角、半角文字列のチェック色々

    先日、新規アプリが無事リリースされました 消費税相互変換電卓 一発消費ゼータくんです。 ↓ 詳しくは画像をクリックしてね! Mac,iPhone,Objective-C 全て利用歴6ヶ月の新米プログラマーが送る 自分が使って役立ったmethod&Tips集 シリーズ第20弾です。 その前にお約束の表示ですよ。 参考場所はありますが単なるコピペを紹介してるわけではありません。 ちゃんと自前で作ってます。(謎のアピール) 登録前の入力文字制限するために文字列のチェックを行います。 英数字以外は自分で文字の範囲を指定しないと駄目で、文字コードを色々設定してます。 引数がアルファベットのみかチェック 引数がアルファベットと数字のみかチェック 引数がアルファベットと数字と記号のみかチェック 引数が全角文字が存在するかチェック 引数が数字のみかチェック Check.h  #import  @interface Check : NSObject + (BOOL) chkAlphabet:(NSString *)checkString; + (BOOL) chkAlphaNumeric:(NSString *)checkString; + (BOOL) chkNumeric:(NSString *)checkString; + (BOOL) chkAlphaNumericSymbol:(NSString *)checkString; + (BOOL) chkMultiByteChar:(NSString *)checkString; @end Check.m #import "Check.h" @implementation Check  // アルファベットのみか + (BOOL)chkAlphabet:(NSString *)checkString {     @autoreleasepool     {         // アルファベットのみで構成されるキャラクタセット         // 範囲を指定する方法でキャラクタセットに文字を追加している         NSMutableCharacterSet *alCharSet;         alCharSet = [[NSMutableCharacterSet alloc] init];         // 'a'から'z'を追加する         [alCharSet addCharactersInRange:NSMakeRange('a', 26)];         // 'A'から'Z'を追加する         [alCharSet addCharactersInRange:NSMakeRange('A', 26)];                  //alCharSet = [[NSCharacterSet alphanumericCharacterSet] mutableCopy]; // 英数字;         //NSCharacterSet *digitCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];         bool ret = [self chkCompareString:checkString baseString:alCharSet];         return ret;          } } // アルファベットと数字のみか + (BOOL)chkAlphaNumeric:(NSString *)checkString {     @autoreleasepool     {         // アルファベットと数字のみで構成されるキャラクタセット         NSCharacterSet *alnumCharSet = [NSCharacterSet alphanumericCharacterSet]; // 英数字;         bool ret = [self chkCompareString:checkString baseString:alnumCharSet];         return ret;     } } // アルファベットと数字と記号のみか + (BOOL)chkAlphaNumericSymbol:(NSString *)checkString {     @autoreleasepool     {         // アルファベットと数字のみで構成されるキャラクタセット         NSMutableCharacterSet *muCharSet = [[NSCharacterSet alphanumericCharacterSet] mutableCopy]; // 英数字;         // 'A'から'Z'を追加する         [muCharSet addCharactersInString:@"$\"!~&=#[]._-+`|{}?%^*/'@-/:;(),"];                  bool ret = [self chkCompareString:checkString baseString:muCharSet];         return ret;     } } // 全角文字が存在するか + (BOOL)chkMultiByteChar:(NSString *)checkString {     if([checkString canBeConvertedToEncoding:NSASCIIStringEncoding]) {         return YES;     }     //NSLog(@"全角文字が含まれています。");     return NO; } // 数字のみか (引数は文字列なので注意) + (BOOL)chkNumeric:(NSString *)checkString {     @autoreleasepool     {         NSCharacterSet *digitCharSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];         bool ret = [self chkCompareString:checkString baseString:digitCharSet];         return ret;     } } + (BOOL)chkCompareString:(NSString *)checkString baseString:(NSCharacterSet *)baseString {     @autoreleasepool     {         NSScanner *aScanner = [NSScanner localizedScannerWithString:checkString];         // NSScannerはデフォルトでは前後のスペースなどを読み飛ばしてくれるのだが、あえて-setCharactersToBeSkipped:でnilを渡して抑制している。         [aScanner setCharactersToBeSkipped:nil];         [aScanner scanCharactersFromSet:baseString intoString:NULL];         return [aScanner isAtEnd];     } } ViewController.h は変更なし ViewController.m #import "ViewController.h" #import "Check.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {     [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.          // アルファベットと数字のみか     if ([Check chkAlphaNumeric:@"13%"] == NO) {         NSLog(@"error");     }          // UITextField の記述方法     //if ([TSCheck _textbox.text] == NO) {     //    NSLog(@"error");     //}      } - (void)didReceiveMemoryWarning {     [super didReceiveMemoryWarning];     // Dispose of any resources that can be recreated. } @end 説明のために超単純化してます、本来ならボタン押したときに入力欄をまとめてチェックするなどで使うと便利です。 参考サイト ■alperithm Objective-C NSStringの半角/全角判別 クラスの作成日を見たら初めてから一ヶ月たってない時に作ったので間違いなく、 どこか参考にしてるサイトが他にもあるのですが 残念ながら見当たりませんでした。   そのほかのObjective-C関連の記事をお探しならコチラをどうぞ   弊社から出している拙作スケジュールのアプリです。 スケジュールというかちょっとした予定を入力して、社長、同僚、家族がどこ行った??っていうときに第三者が確認するためのアプリです 是非ダウンロードして感想をお聞かせ下さい。 『Team Scheduler』 概要 ▼アプリ価格: 無料 ▼対応OS: iOS(iPhone/iPod Touch)、Android ▼カテゴリ: 仕事効率化(App Store)、ビジネス(Google Play) ▼対応言語: 日本語 ▼推奨環境:  iOS版: iPhone4以降、iOS6. 0以降  Android版: Android OS 2. 3以降 ▼ダウンロード: