Xamarin for Visual Studioのiosシュミレータでハマった話

Mac Book AirからMac Book Proに買い替えたため、Parallels Desktop11にWindows10を入れて、Visual Studio2015を使ってiosシミュレーターを起動させようとしたところXamarin Mac Agentの接続ユーザ名とパスワードを入れてもエラーで接続できない。以前やった時はできたのに何故かと悩んでいたら、普通にエラーメッセージに「Xcode license must be accepted in order to be connected and working against the Mac」と表示されているのに気づかなかった。。。

Xcodeインストールはしたけどまだ起動してなかったw

一度起動させてから再度Xamarin Mac Agentで試したところが無事接続できた。

情けないw

swift3ことはじめ

会社の勉強会でswiftをちょっと触ったので久しぶりに真面目に使ってみたくなった。

自分がios開発を初めてやったのが、もう5、6年も前のobjaective-cの時代の事。

当時はまだプログラマに転職する前で、某製造メーカで営業をしていたが、趣味でプログラミングを初めて、最初に触ったのがobjective-cだった。

単純にどうせやるなら自分の興味あるiPhoneアプリを作ってみたくて始めた訳だが、初心者にios開発は厳しく全然分からなかったが、何だかんだ以外に面白かったので、仕事でもプログラミングしたいと思って転職まで至った。

swiftが全然わからないが、取り敢えずストア公開するためにサンプルアプリを改造してリリースしてみよう。勉強が目的にならないように気をつけねば。。。

 

XamarinでUITableViewのセルをタップしても画面遷移できなくてはまった話。

久しぶりにXamarinでios開発をやろうと思った際にちょっとはまりました。

UINavigationControllerの下にUITableViewControllerがRootとしてあり、

その中のセルをタップすると次のUITableViewControllerが表示されるように画面遷移したいのに、遷移できない。なぜだ??

答えは簡単でした。

storybordを使用した場合、UITableviewCellのIdentifierプロパティを設置していませんでした。

この値をMyCellとして(何でも良いけど、後でプログラム内で使用)、

f:id:nooootion:20160809204838p:plain

UITableViewに一覧表示するためのUITableViewSourceを継承したクラスのGetCellメソッド内のUITableViewCellのIDとして使用すればOK。

f:id:nooootion:20160809204852p:plain

久しぶりに触るとすっかり忘れて完全にはまりました。

XamarinでSqliteに接続(ADO.NET)

どもやっとXamarinでSqliteに接続してデータを取得することができたmorimoriです。

今回はその方法を紹介します。

XamarinでSqliteに接続する方法はいくつかあるみたいですが、今回はみなさん良く利用するADO.NETを使用します。

 

①画面作成

まずSingleViewにラベルとボタンを貼り付けます。

このボタンを押した際にDBからデータを取得してラベルの表示を変更する簡単なプログラムを作成します。

f:id:nooootion:20160627230746p:plain

②dllの準備

ReferencesにMono.Data.SqliteとSystem.Dataを追加します。

また、ResourcesにSQLite.csを追加します。

SQLite.csはOSSから拝借します。

https://github.com/praeclarum/sqlite-net/blob/master/src/SQLite.cs

f:id:nooootion:20160627231010p:plain

f:id:nooootion:20160627231128p:plain

 

③DB接続用のクラスを作成

下記の様なDB接続後にデータを取得するクラスを作成しました。

DB名はdb_test.dbでテーブル名がtest_tableになります。

今回の場合はsqlitebrowserでテーブルを取得するデータを作成してあります。

f:id:nooootion:20160627231540p:plain

f:id:nooootion:20160627232027p:plain

 

④ViewControllerからDB接続クラスを読んでデータを取得する

f:id:nooootion:20160627232227p:plain

ボタンを押した際に先ほどのDB接続クラスからデータを取得します。

そうするとラベルの値がDBから取得したデータに変更されます。

f:id:nooootion:20160627232356p:plain

 

⑤最後に

Sqliteの使用方法についてはMapingを使用することで、SQLをだらだらと書く必要が無いやり方もあるようなのでそちらも試してみたいですね。

XamarinでUITableViewのセルの内容を遷移先のUITextViewに表示させる方法。

前回からの続きで、今回はUITableViewのセルをタップするとセルの内容が遷移先のUITextViewに表示されるようにする方法です。

nooootion.hatenablog.com

まず、UITableViewのセルをクリックして、controlとドラッグで画面遷移先のUITextViewに線を移動させます。画面の間に表示された矢印をクリック、プロパティを表示させてsegueのidentifierに適当に名前を付けます。(next_detailViewにしました。)

f:id:nooootion:20160617220559p:plain

続いてUITableViewの乗っているTableViewController(ここではMainTableViewController)にプログラムを追加します。UIViewControllerのメソッド(PrepareForSegue)をオーバーライドして中身を実装します。

f:id:nooootion:20160617221407p:plain

続いて呼び出し先のDetailViewControllerのsetContentsメソッドの中を実装します。

f:id:nooootion:20160617221923p:plain

フィールド変数として、row、isNew、contentsを保持しており、遷移前に押されたセルの番号、文字を格納します。

後は、DetailViewControllerのViewDidLoadメソッド内で、UITextView.Text=contentsとして文字を表示させればOKです。

 

完成動作がこちらです。

①MainTableViewControllerに表示されている文字をタップする。

f:id:nooootion:20160617222309p:plain

②遷移先のDetailViewControllerに先ほどセルに表示されていた文字がUITextViewに表示されます。

f:id:nooootion:20160617222402p:plain

XamarinでTextViewで入力した内容をTableViewの一覧に表示する。

前回からの続きでiOSアプリ標準のメモ帳を作成していますが、今日はTextViewに記入したメモの内容をTableViewに一覧表示する方法を記入したいと思います。

nooootion.hatenablog.com

全体の構成としてはこんな感じです。

UINavigationController

    ↓

MainTableViewController(UITableViewController)

             

DetailViewController(UIViewController)

f:id:nooootion:20160613234143p:plain

MainTableViewControllerがRoot画面となっており、TableviewのNameをtableとしてあります。また、DetailViewControllerのTextViewのNameにdetailTextViewと命名してあります。

画面遷移の方法は前回の記事を見ていただければ良いかと思いますので省略します。

今日はDetailViewControllerのTextViewに内容を記入したものを、MainTableViewControllerに戻る際に一時保存してテーブル一覧に表示させます。

動作としてはこんな感じです。

①TextViewにメモを記入します。

f:id:nooootion:20160613235453p:plain

②メモボタンでMainTableViewController画面に戻ります。

f:id:nooootion:20160613235707p:plain

③右下の新規作成でTextView画面で再度メモを入力すれば一覧に追加される。

f:id:nooootion:20160614000214p:plain

f:id:nooootion:20160614000135p:plain

f:id:nooootion:20160614000312p:plain

 

ここからはコードを記載します。

まず、DetailViewControllerの内容になります。

f:id:nooootion:20160614000525p:plain

前回から追加されているのはViewWillDisappear()になります。

メモボタンでMainTableViewController画面に戻る際に、DataSourceクラスにTextViewに入力した内容を保存します。

DataSourceクラスになります。

f:id:nooootion:20160614000941p:plain

内部にListクラスを持っており、先ほどのSet()でパラメータで渡された文字列をListに保存しています。

もう一つ、フィールド変数として自分自身(DataSourceクラス)を保持していますが、

全体でデータ情報を管理するクラスとして一つだけ存在するようにコンストラクタをprivateにして初回時に一度だけインスタンスを生成するシングルトンクラスになるようにしてあります。

また、UITableViewSourceを継承しており、GetInstance()で自分自身を戻り値の型とすることで、UITableView.Source()にデータを代入してテーブルに表示できます。

最後に、MainTableViewControllerになります。

f:id:nooootion:20160614001954p:plain

ViewWillAppear()で画面再度表示される際にDataSource.GetInstance()でデータをセットしてUITableView.ReloadData()でセルの内容を再描画しています。

 

ハマったポイントとして、

ViewWillAppear()で画面が再度呼ばれればデータも再描画されると思ったら、表示がされないためちょっとハマってしまいました。

再度セルに表示させるためにはUITableView.ReloadData()で再度読み込ませないとテーブルにデータが表示されないので注意が必要です。

XamarinでUINavigationControllerの戻るボタンを押した際に処理をさせる方法。

nooootion.hatenablog.com

前回の記事の続きで、UINavigationControllerで戻るボタンを押した際に何か処理をさせる方法です。

今回はテストとして、戻るボタンを押した際にアラートが表示されるようにします。

この部分を書き換えればメモ帳アプリのように戻るボタンが押された際にUITextViewに書き込みがあれば内容を保存するような処理が書けるかと思います。

①詳細画面(DetailViewController)から一覧画面に戻る

f:id:nooootion:20160607215955p:plain

②UINavigationControllerにデフォルトで付いている戻るボタン(メモ)を押す

f:id:nooootion:20160607220223p:plain

③アラートが表示される

 

処理方法

プログラムは至って簡単です。

UIViewContorllerのメソッド、ViewWillDisappear()を実装します。

DetailViewController自体UIViewControllerを継承しているので、

オーバーライドして新しく処理させたい内容を記述します。

なぜオーバーライドさせるかというと、継承しただけでは自分が処理させたい内容が実装できないからです。そのためにUIViewControllerのViewWillDisappear()はvirtual 型となっています。

f:id:nooootion:20160607221232p:plain

まとめ

最終的にはSQLiteを使用してDBに保存したデータをTableViewとTextViewに表示、編集できるようにしたいと思います。