さとやn Blog

試合はRuby,勝負はC#!

C#でiPhone

C# でIPhone Xcode4.1でできるようになった

InterfaceBuilderとXcodeが統合されてしまったせいでさっぱりやり方がわからなくなってしまったMonoTouchですが、Xcode4に対応したバージョンがAlpha版で出たらしいので、早速やってみました。
確かに以前より使いやすくなってはいますね。

xcode4.1でMonoTouchはまだ無理のよう

現時点ではまだサポートされてないようですね。

http://ios.xamarin.com/Roadmap

Short Term

Some of the technology that was developed for Xamarin’s XTouch and Xdroid products will be folded into MonoTouch and Mono for Android, and we will deliver these changes initially on our beta channel, and we will graduate those to the stable channel over time.

For MonoTouch, this will include the following improvements:

  • New MonoDevelop Release:
    • Adds integration XCode 4’s Interface Designer
    • Adds new iPhone property list editors
    • Unified MonoDevelop, Mono and MonoTouch updater

全く見た目が変わっててさっぱり使い方がわからなかった、、、。
InterfaceBuilderってどこいっちゃたの? って感じです。

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アプリやってる時と変わらないんだなーって感じでした。

C#でiPhone HelloWorldやってみた

ようやく今頃になってMonoTouchを使ってC#でiPhoneアプリ作成を試してみました。
HelloWorldレベルのものですが、いやー、やっぱりC#で作れるっていいなーと思いました。
特に仕事でJavaばっかり触ってたので、ほんとちょっとした短いコードでも洗練された言語ってホント気持ちがいい、、。 

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