システム開発
now browsing by category
iOS開発:UIAlertControllerにチェックボックスを付ける[Objective-C]
昔のプログラムを久々に開くと、UIAlertで警告がたくさん出ます。
どうやら、「非推奨部品になったから変更して!」という事のよう。
UIAlertViewからUIAlertControllerという部品に変更になります。
view部品からコントローラーになるので、それなりに改造が必要ですが
単純なリプレースは巷に情報が溢れていますので割愛します。
今回の記事はUIAlertControllerにチェックボックスを付けるカスタマイズをすると嬉しいな、
という状況があり実現に試行錯誤した備忘録です。
準備
アラート表示を必要とするViewControllerのヘッダファイルに以下を定義
(プロパティで持つ必要ない場合はコード中で宣言)
1 2 3 |
@property (nonatomic) UIAlertController *alertController; //アラートコントローラー本体 @property (nonatomic) UIButton *btn1; //ボタン @property (nonatomic) UILabel *chkLbl; //ラベル |
これらの部品を使ってこんなのを作ってみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
self.alertController = [UIAlertController alertControllerWithTitle:@"確認" message:@"このスケジュールを削除しますか?" preferredStyle:UIAlertControllerStyleAlert]; // addActionした順に左から右にボタンが配置されます [self.alertController addAction:[UIAlertAction actionWithTitle:@"削除する" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { // otherボタンが押された時の処理 [self ListYesPushed]; }]]; // addActionした順に左から右にボタンが配置されます [self.alertController addAction:[UIAlertAction actionWithTitle:@"キャンセル" style:UIAlertActionStyleDefault handler:nil]]; //アラートを表示する [self.view.window.rootViewController presentViewController:self.alertController animated:YES completion:^{ NSLog(@"displayed"); self.btn1 = [[UIButton alloc] init]; //擬似チェックボックス部品 ボタン部分 self.chkLbl = [[UILabel alloc] init]; //擬似チェックボックス部品 チェック状態表示ラベル //チェックボックス表示位置指定 CGRect rect = CGRectMake(80, 64.0, 20, 20); //付帯メッセージラベル表示位置指定 CGRect rect_lbl = CGRectMake(100, 66.0, self.alertController.view.frame.size.width - 2 * 2.0 , 15.0); //チェックボックス部品に表示位置を定義 self.btn1.frame = rect; self.chkLbl.frame = rect; //チェックボックス動作をさせるためのボタンにアクションを定義 [self.btn1 addTarget:self action:@selector(multiDeleteFlgChg:) forControlEvents:UIControlEventTouchDown]; //付帯メッセージラベルを生成 UILabel *lb = [[UILabel alloc] initWithFrame:rect_lbl]; lb.text = @"同一期間分を含む"; //チェックボックスのラベル部品 アラートのデフォルトメッセージにサイズを合わせてみる [lb setFont:[UIFont systemFontOfSize:12.0]] ; [self.chkLbl setFont:[UIFont systemFontOfSize:12.0]] ; //チェック状態を表すテキストコードを代入 self.chkLbl.text = @"\u2B1C";//OFF //アラートウィンドウに色付ける場合はこうしたら良いみたい //self.alertController.view.backgroundColor=[UIColor yellowColor]; //縦の長さをちょこっと伸ばす(最後の+30) [self.alertController.view addConstraint:[NSLayoutConstraint constraintWithItem:self.alertController.view attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeHeight multiplier:1.0 constant:CGRectGetHeight(self.alertController.view.frame) + 30]]; //チェックボックス部品、ラベル、ボタンをコントローラーに貼り付け [self.alertController.view addSubview:lb]; [self.alertController.view addSubview:self.chkLbl]; [self.alertController.view addSubview:self.btn1]; }]; |
最後の貼り付けは順序が大切です。
チェックボックスはチェックボックス風のテキストコードを貼り付けて実現しています。
addsubviewする順序はラベルを先に宣言し、ボタンを宣言します。
こうする事で、同じサイズのラベルとボタンが重なって定義され、
また透明のボタンの下にチェックボックス風の表示内容が透けて見える事になります。
蛇足的ですが、ボタンのアクションに定義した multiDeleteFlgChg メソッドを定義します。
1 2 3 4 5 6 7 8 9 10 11 |
//ダイアログの中のチェックボックス(ボタン)制御 -(void)multiDeleteFlgChg:(UIButton*)button{ if([self.chkLbl.text isEqualToString:@"\u2705"]){ //ONのとき self.chkLbl.text = @"\u2B1C";//OFF }else{ self.chkLbl.text = @"\u2705";//ON } } |
発生したイベントの中で、現在のラベルを確認して反転しているだけです。
作ったのは以上です。
実際に、アラートのボタン(本例では「削除する」ボタン)のイベントの中で、
ボタン反転処理と同じように、ラベルの内容を判断してあげればチェック状態を意識した処理が作れると思います。
課題は・・・・コントローラーならデザイン触れるんじゃないの?と思い縦幅だけ触ってみましたが
よく見るとボタンの罫線が付いてきて居ませんので、完成させるにはもう少し調査しなくてはいけませんね。
業務を支援するデータ変換ツールの開発
とあるご紹介で、社内のシステムを変えた際に、業務に一部支障があるとのことでご相談を受けました。
前まで使っていたシステムソフトにあった「便利な機能」がシステムを変えたことで実現できなくなった、と。
これまで、システムから業務に使う帳票やデータを出力して使えていましたが、新システムではCSVファイルのダウンロード機能しかない。
ダウンロードしたファイルをエクセルで開き、編集したり集計したりすれば欲しい情報(印刷用の資料作成)はできるのですが、これまで以上に事務作業や編集作業が掛かり、また毎度同じような作業が必要になっていました。
担当さんが変わると、その加工手順やスキルによってはエクセル編集の手ほどきからしなくてはなりません。
日々の業務における時間損失や今まで以上の負担を考え、便利なツールが欲しい、というご相談でした。
これこそ、ITが得意とするところです。
構成や作り方に幾つかパターンがあり、それぞれメリット・デメリットもあります。
まずはパターンとそれぞれのデメリットを表記した概算価格表を提案としてご提示しました。
(1)エクセルのマクロプログラムとしてご提供。
グループでの利用には向かない。
利用端末に必ずエクセルが必要。
あまり大きなデータは性能的にも扱いにくい。
エクセルバージョンなどにも左右されるため、長期に渡り使える保証はない。
制約も多いが安価に構築できる。
(2)専用アプリケーション(exe)としてご提供。
グループでの利用には向かない。(運用ルール次第)
大きなデータも扱えるし、仕様変更や追加にも対応しやすい。
同一アプリを長期利用したい場合に向いている。
エクセルに比べて割高。
(3)WEB型システムのご提供。
WEBブラウザで操作し、複数者利用を前提に作るためグループでの利用が可能。
データの取り扱い量の制約はない。
同一アプリを長期利用したい場合に向いている。
設計も複雑になり、一番割高。
結果として、今回はグループでの利用は必要ないだろうとのことで真ん中プランでご依頼でした。
当初お聞きしていたのは印刷帳票3種とエクセルファイル2ファイルの生成でしたが、
最終的に帳票を1つ減らしましたので最終のお見積ののち、作業を頂きました。
ITは慣れれば慣れるほど「当たり前」になりますが、環境の変化や不具合で急に「当たり前のことができなくなった」時に、いかに便利だったかを痛感するという声をよくお聞きします。
今現在、データ解析や整理が本業ではないのに、PCに噛り付きルーチンワーク的な編集作業に時間を費やしている方がいれば、”これはITで楽にならないのだろうか?”と考えてみてください。
“毎日この作業から解放されると、さらに違うことができるのになぁ”そう思える作業はもしかしたらITにやってもらう事ができるかもしれませんよ。
VPNによるプライベート通信の構築
「会社の(ネットワーク環境の)中にある電子資産(資料やシステム)を外部で使えたらいいなぁ。」
そんな事、思ったことありませんか?
今やネットワークによる情報の取得や仕事や組織運営においてシステムや電子資料は欠かせないもの。
でも、「内部で使用しているものを外部でも使う」のは色々と敷居が高そう・・・と諦めていないでしょうか?
そんなお悩みはVPN(Virtual Private Network)を用意することで解決できるかもしれません。
たとえばこんな事例というものを3つ程あげてみましょう。
(1)個人で仕事をしているケース
自宅のPC環境にVPNを導入することで下記のような事が可能になります。
・インターネットを経由しつつ、外部から”まるで自宅のPCにアクセスするかのように”
安全(通信暗号化等)にアクセスすることができます。
・設定次第で、PCのほか、iPadなどの情報端末からも自宅内PCにアクセスが可能ですので
客先に見せる資料などを「忘れた」という事がなくなります。
(2)3拠点の事務所や工場を持っている。メールなど、必要に応じて各拠点には
それぞれインターネットを用意しているが、資料の共有などはメールが中心であり、
送付忘れや各所で別々に同一資料を更新するなど、当初に考えていた程便利とは思えない。
→各拠点で用意したインターネット環境はそのままにして、
VPNにより擬似的な同一ネットワークとして接続する事ができます。
会社で共通の資料はいちいちメール送付する事なく、同一のファイルを編集させる事もできます。
顧客情報や業務の管理情報など、電子資料化したものを一元管理することができます。
情報の精度が上がることで、「期待していた利便」を取り戻すことができます。
(3)ある組織運営において、あまり外部公開されているサービスを使ったやりとりをしたくないため
システムやスマートフォンなどの活用を考えてみるものの躊躇している。
→VPNを使えば掲示板などでの意見交換や情報伝達・連絡などを
PC、スマートフォン含めプライベートなネットワークで運営することが可能です。
プライベートネットワーク内に掲示板サーバなどを設置すれば、
インターネットとは完全に切り離されたネットワーク内だけでやりとりが可能です。
最近、仕事の延長線上・・・というより脱線したところの部分で、(3)に該当するケースとして、開発拠点が離れている中で、共通のデータベースを使いたいが、業務開発環境をインターネットに繋げたくない、という事情があり、作業内有志でVPNについて整理・設定実証を行いました。
使ってみると、大変便利!
実際にwindowsPC、macbook、iPhone、androidに同じVPN設定を施し、プライベートネットワーク内に設置したデータベースにアクセスして動作させてみました。
また、windowsの操作で便利なリモートデスクトップも、ローカルIP(192.168.x.x等)で接続でき、ネット公開状態に比べてはるかに安全な環境になりました。
開発中のiPhone向け業務アプリについては、これまでお客様にはモックアップだけでデモ・レビューをしておりましたが、これからはVPN先のデータベースに繋ぐことで、進行中のプログラムを実際に動かしながらレビューや議論ができそうです。
知っていれば得をする。知っていれば便利になる。
情報(IT)に関してのお悩みは身近なプロに相談してみてください。
ARDUINOを使ったデータ計測装置の開発(3)
合間合間で作っていた計測システム、ようやく完成しました。
基盤はArduino互換基盤で、端子などをハンダ付けした小さい基盤を作成しました。
今回のプログラムは温度を計測するセンサー2本を制御するものです。
fujisawaweb自前のデータ受信サーバに定期的にデータを送信することで
データを保存し、WEBブラウザを通してデータ一覧を見たり、
時間軸と温度を表現したグラフを見たりできます。
なるべく簡易にするために、温度素子の補正などはハード側では行わず、
データ登録の機能に対して補正(プラスマイナス)する数値を調整したり、
データ収集周期を設定したりする事ができます。
まずは1アカウントにつき最大1000件のデータ保持をしています。
(モニター機能では最大200件分を表示)
この装置を太陽光発電した電源を使って、本装置と無線LANルーターを独立運転しています。
省電力電源でネット通信(無線LANルーターor有線LANケーブル)機能を備えた計測装置、
というテーマで研究していた工作が一段落しました。
10cm四方程度の小さな箱装置で2台の水槽の常時水温監視&見える化のシステムが出来ました。
次の目標は温度しきい値によるファンコントローラー機能の追加ですかね。
(後は見栄え悪いので、ITとは別ですが装置入れる箱も用意しないと。。)
温度センサーの計測は1つの装置で最大4台程度制御可能です。
アクアリウムでの利用の他、常設の装置で安価に監視・管理したい需要などに使えそうです。
ご興味ある方はお問合せください。
ARDUINOを使ったデータ計測装置の開発(2)
先日から進んで、テスト環境としては完成しました。
構成は Arduino UNO 本体にLANシールドを載せた基盤を基本として、
小さなブレッドボード上にアナログ端子に LM35DZ(温度端子)を接続して温度を計測します。(イメージは前回の記事写真にあります)
有線LANで接続した本機からインターネットを通じて通信し、 fujisawaweb.net に設置したサーバ用の受信プログラムに対して計測した温度を送付します。
サーバ側にはデータベースを用意しておき、受信したデータを溜め込みます。
簡単な確認プログラムも書いてみました。
最新20件のデータをグラフと一覧で表示するプログラムです。
グラフの変化のテストも兼ねて、センサーを指で触って温度変化させたデータを取得してみました。
テスト・モニターサイト
(テストサイトですのでリンク切れの場合は既に休止しているかもしれません)
今まではPCの中だけで動くソフトを作っていましたが、ハードウェアの制御や監視も手を出してみるとなかなか面白いですね。
これで、実験としては一旦区切りですが、やりたい事も含めて、下記をぼちぼち研究していきます。
・サーバからArduinoへの設定値を指示する(データを渡す)方法
・太陽光パネルの電圧計測
・複数の計測端子の制御、監視(温度×3や温度・湿度・電圧など)
・USB以外の電源での動作方法
・サーバ側のデータ収集プログラムをもう少し複数端末等を意識した構造にする
農業向けに気温・水温・土の温度や湿度、光の強さなどの監視や、
家庭向け小規模太陽光発電の管理(これをやりたい)には十分使えそうな感じです。
Arduinoを使ったデータ計測装置の開発
ハード制御をするためのソフトウェア研究として、Arduino環境の開発をしています。
目標とする構成ですが、基本基盤にLANボード拡張を行ったモジュールを使って、温度(気温)をアナログのセンサーから計測し、計測値をLAN(WEB)を介して外部のサーバへ送信する装置の製作です。
現在、温度を取得して定期的に監視するところまで出来ていて、LANを使った通信部分の作成をしているところです。
通信モジュールができたら、今度はテスト用の受信プログラムをサーバに配置してデータの取得ができるかテストします。
将来の利用方法として、まずは光センサ(光の強さ)、気温と太陽光パネルの発電電圧を計測・監視するシステムを作ってみるつもりです。
Arduinoを使った独自の計測装置を作ってみたい方、ソフトウェア部分の製作をご支援できます。
よろしくお願いいたします。
画像投稿システム開発
WEBやメディアを使った企業PRを行う会社様で、業務ツールの一環として、画像を投稿するシステムプログラムの開発を行いました。
スタートアップ・プロジェクトとして、早期に具現化したい、費用を抑えたい、柔軟性ある対応が欲しい、との要望にマッチしそうとの事でご依頼頂きスタートしました。
先方様としては要望は伝えるが事細かに先方が設計したり、工程をキッチリ引くやり方では無く、コスト見合いを相談しながら、目標期間(今回はお話を頂いてアフター込3ヶ月)でできる成果を提供する事を望んでおられますが、(自身の経験からも)企業体ではその様な”柔らかいルール”で動くには顧客トラブルリスクもあり手が出るものではありません。
今回はご依頼にあたり、”コスト見合いの協議必須”とさせて頂き、徐々にコストが減っていく中でご要望や変更依頼を貰いながら進めて行き、アフターが出来るコストを少々残して収束となりました。
(事情的に期間内でもできる範囲は限られていますのでトータルで1ヶ月程度のコストですかね。)
パスワードロックした環境で実際にWEBサイトに構築段階のプログラムをおき、常に動作を見てもらいながらメールやお電話で協議をすすめて完成に至りました。
福井県の会社様ですが、インフラ関係を中心に活動されています。
まだベータ版(PR版)なので勝手に公開できませんが、公式サービス化すると、ここでご紹介できるかもしれません。