さとやn Blog

試合はRuby,勝負はC#!

2011年06月

C#でiPhone - キーボードの有無によってテキスト編集エリアのサイズを変更する

テキストエリアのフォーカスが移ると自動的にキーボードが表示されるようになっていますが、テキストエリアを画面いっぱいに表示してたりすると、表示されたキーボードがテキストエリアの一部を隠してしまう場合があります。
そのような画面レイアウトの場合は、キーボードの表示・非表示に応じてテキストエリアのサイズを変更する必要が出てきます。
というわけでやってみました。
ポイントは
  • NSNotificationCenter.DefaultCenter.AddObserver − キーボードの表示・非表示の通知を受けるようにする
  • ResignFirstResponder - コントロールからフォーカスを外す - .NETで言うところのLostFocus
ってところでしょうか。

using System;
using System.Collections.Generic;
using System.Linq;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using System.Drawing;

namespace HelloIPhoneTextView
{
	public class Application
	{
		static void Main (string[] args)
		{
			UIApplication.Main (args);
		}
	}
	
	// The name AppDelegate is referenced in the MainWindow.xib file.
	public partial class AppDelegate : UIApplicationDelegate
	{
		
		NSObject kbdShow, kbdHide;
		
		// This method is invoked when the application has loaded its UI and its ready to run
		public override bool FinishedLaunching (UIApplication app, NSDictionary options)
		{
			doneButton.Enabled = false;
			
			kbdShow = NSNotificationCenter.DefaultCenter.AddObserver (UIKeyboard.WillShowNotification, delegate(NSNotification n) {
				var kbdFrame = UIKeyboard.BoundsFromNotification (n);
				var frame = textView.Frame;
				frame.Height -= kbdFrame.Height;
				textView.Frame = frame;
				doneButton.Enabled = true;
			});
			
			kbdHide = NSNotificationCenter.DefaultCenter.AddObserver (UIKeyboard.WillHideNotification, delegate(NSNotification n) {
				var kbdFrame = UIKeyboard.BoundsFromNotification (n);
				var frame = textView.Frame;
				frame.Height += kbdFrame.Height;
				textView.Frame = frame;
				doneButton.Enabled = false;
			});
			
			doneButton.TouchDown += (sender, e) => {
				textView.ResignFirstResponder ();
			};
			
			
			window.MakeKeyAndVisible ();
	
			return true;
		}
	
		// This method is required in iPhoneOS 3.0
		public override void OnActivated (UIApplication application)
		{
		}
		
		public override void WillTerminate (UIApplication application)
		{
			NSNotificationCenter.DefaultCenter.RemoveObserver (kbdShow);
			NSNotificationCenter.DefaultCenter.RemoveObserver (kbdHide);
		}
		
	}
}



C#でiPhone - UiWebViewでWebブラウザを実装してみる

要素のクリックイベントとかフォーム送信イベントとかキャッチできて対象のDOM要素とかも判定出来ればいいんだけど、、方法を知らないだけ?

オープニング用にメンデルスゾーンの結婚行進曲をギターで作ってみました。うるさいし、何がしたいのかよくわからなくなってきた、、、。

パート1

パート2
using System;
using System.Collections.Generic;
using System.Linq;
using MonoTouch.Foundation;
using MonoTouch.UIKit;

namespace HelloIPhoneWebBrowser
{
	public class Application
	{
		static void Main (string[] args)
		{
			UIApplication.Main (args);
		}
	}
	
	// The name AppDelegate is referenced in the MainWindow.xib file.
	public partial class AppDelegate : UIApplicationDelegate
	{
		// This method is invoked when the application has loaded its UI and its ready to run
		public override bool FinishedLaunching (UIApplication app, NSDictionary options)
		{
		
			myWebBrowser.ShouldStartLoad = delegate(UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType) {
				if (navigationType == UIWebViewNavigationType.LinkClicked) {
					UIApplication.SharedApplication.OpenUrl (request.Url);
					return false;
				}
				return true;
			};
			
			goButton.TouchDown += (sender, e) => {
				myWebBrowser.LoadRequest (new NSUrlRequest (new NSUrl (myUrlText.Text)));
			};
			
			myWebBrowser.LoadStarted += (sender, e) => {
				UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true;
				myUrlText.Text = myWebBrowser.Request.Url.AbsoluteString;
			};
			
			myWebBrowser.LoadFinished += (sender, e) => {
				UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false;
				myUrlText.Text = myWebBrowser.Request.Url.AbsoluteString;
				this.updateNavigateButtonEnabled ();
			};
			
			
			myWebBrowser.LoadError += (object sender, UIWebErrorArgs e) => {
				UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false;
				using (var alert = new UIAlertView("Error!!", e.Error.LocalizedDescription, null, "OK", null)) {
					alert.Show ();
				}
				this.updateNavigateButtonEnabled ();
			};
			
			backButton.TouchDown += (sender, e) => {
				myWebBrowser.GoBack ();
			};
			
			forwardButton.TouchDown += (sender, e) => {
				myWebBrowser.GoForward ();
			};
			

			window.MakeKeyAndVisible ();
	
			return true;
		}
		
		void updateNavigateButtonEnabled ()
		{ 
			backButton.Enabled = myWebBrowser.CanGoBack;
			forwardButton.Enabled = myWebBrowser.CanGoForward;
		}
		
	
		// This method is required in iPhoneOS 3.0
		public override void OnActivated (UIApplication application)
		{
		}
	}
}


C#でiPhone - UiScrollViewを使ってページめくりしてみる

KindleアプリやStanzaアプリなどページめくりのできるアプリがありますが、実際に紙がめくれるような視覚効果を使用しないのであれば結構簡単にできてしまうようです。


C# で iPhone - UiBuilderを使わずにUIを使ってみる

以前トライしてみた時はボタントラベルの配置にUiBuilderを使ってやってみたのですが、まあそれが正当なやり方なのでしょうけど、ただ実際ちょっとこったアプリを作ろうとすれば動的にUIを構築する必要が出てくると思われるので、試してみました。
また超簡単なHelloWorld的なものですが、基本的にその辺はWindowsアプリやってる時と変わらないんだなーって感じでした。

Rails3でRaisl2.x風にコントローラに名前空間を付ける

Rails2.x の頃はよく管理系のページは
admin/users
とか
admin/products
みたいにコントローラに自由に名前空間をつけてやってたんだけど、
Rails3で同じことをやろうとしたらルーティングエラーで怒られる。

Routes.rbを開いてみると

namespace :admin do
  resources :products
end


みたいな書き方がのサンプルがある。
でもこれっていわゆるRESTFULな使い方しかできない。
Action名とか自由につけたい場合はどうすればいいのだろう?

名前空間なしで以前のRaisl2.xふうにする場合は、単純にデフォルトでコメントアウトされている
#match ':controller(/:action(/:id(.:format)))'
この行を復活させればよかったんだけど、じゃあ同様にこれを上記の書き方で名前空間でくくってやればいいのかな?

namespace :admin do
  match ':controller(/:action(/:id(.:format)))'
end


う〜ん、だめだ、、、。

で、結局

match ':controller(/:action(/:id(.:format)))', :controller => /admin\/[^\/]+/

正規表現で対応することに、、、。

他に方法ないのか?
っていうかRESTFulってそんなにいいもの?
いちいちカスタム命名したアクション追加するたびに
Routes.rbに記述加えるのってすごく面倒だと思うのは私だけなんでしょうか?
new,create,edit,update,destroy以外のアクションって欲しくなるとき多々あるんだけど。。。

なんかめんどーだー、、。 
本気でRailsやめてASP.Net MVC で作りたくなってきた。
 

Kindleに朝日・日経・読売の社説&コラムを自動配信

丁度2年くらい前にRubyを使って自分宛にメール配信するそんなスクリプトを作ったのですが、Kindle購入時に割り当てられた専用のメールアドレス宛に配信すればよくない? ってことでちょっと改修。
Kindleの場合はメールに添付ファイルとしてKindleに取り込むデータを送らなければならないので、そこだけちょっといじって、あとはcronで毎日7:10(※7:00だとたまに更新されてない場合がある)に起動するように設定。

新松戸〜亀有あたりまで時間潰せます、、、。

興味のある方は自作してみるといいと思います。
産経、毎日も対応しようかな、、、。 

 IMG_0481

ギタースコアと音源(MIDI)を無料でGETできるChromeアプリ GuitarProViewer すげー

ギタースコアと音源(MIDI)を無料でGETできるChromeアプリがある、ということで早速インストールしてみました。

まあ、音はMIDIなので期待してはいけませんが、これはかなり良いです。

曲名やアーティスト名で検索することもできて、試しにXJapanやBzで検索したらちゃんといくつか引っかかりました。
まあ、どっちも弾かないけど(弾けないけど)。 

というわけで、興味のある人は一度試してみるのもいいと思います。


livedoor プロフィール
QRコード
QRコード
  • ライブドアブログ