UIBarButtonItemの戻るボタンを画像にしたりカスタマイズする方法

iPhone

UINavigationControllerを使っていて、戻るボタンをカスタマイズしたいときがあります。
例えば、

  • ボタンを画像にしたい
  • サイズを変えたい

などです。

今回はそんな凝り性な方のために、ボタンのカスタマイズの方法を記載します。
AppDelegate.mとか全画面で継承してるUINavigationControllerのサブクラスに以下のコードを書きましょう。

 UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle: @" " style:UIBarButtonItemStylePlain target:nil action:nil];
 [self.navigationItem setBackBarButtonItem:backButton];
    
 UIImage *backImg = [[UIImage imageNamed:@"back.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 10)];
 [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backImg forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

まず、何も文字を表示しないUIBarButtonItemをつくります。
これをつくらなかったり文字を表示するボタンを作ってしまうと、ボタンの中に「戻る戻る戻る」というような、文字が連続して表示されてしまいます。

次に、UIImageをつくります。
このとき、UIEdgeInsertsMakeという関数が出てきましたね!
こいつは、マージンをつくってくれます!
html、cssのマージンみたいなものです。
本来は、以下のように使用します。

 UIEdgeInsets insets = UIEdgeInsetsMake( 5.0f, 10.0f, 15.0f, 20.0f);
 CGRect aRect  = UIEdgeInsetsInsetRect( bView.frame, insets);
 aView.frame = aRect;

UIEdgeInsetsはマージンの構造体です。

 typedef struct UIEdgeInsets {
    CGFloat top, left, bottom, right;
 } UIEdgeInsets;

また、他のオブジェクトを基準にしてマージンを設定する場合に、基準とするオブジェクトを引数にします。
上の例の場合は、bViewを基準にして上に5、左に10、下に15、右に20のマージンのあるaViewを作ります。
bViewの中に、上記マージンを持つaViewがあるというイメージです。
わかりづらい方は以下のサイトで画像を見てください。
http://runlooprun.wordpress.com/2011/02/20/uiedgeinsets/

で、本題に戻りまして、今回の戻るボタンの場合では、

 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 10)];

ということで、戻る画像の右に10の余白がある状態です。
これで、画像のサイズを調整できます。
戻るボタンの画像デザインを、通常の戻るボタンのように左側を「くの字」にしてる方は、
画像のサイズを伸ばすということは、左の「くの字」部分が伸びてしまうのではないかと懸念するでしょう。
しかし画像の左側13px、右側6pxは固定表示なのです。
そのため「くの字」部分は左側13px以内なので、伸ばされてへんな表示になることはありません。

これで完成です!
より詳しい方法は以下より見てください。
http://www.appcoda.com/customize-navigation-bar-back-butto/

UFrame

Ajax
Javascript

iframeのように他ページのコンテンツを取得する

iframeというタグはほかのページのコンテンツを自分のサイトに埋め込むことができ、場合によっては非常に便利です。
しかし、ブラウザ間で挙動が違ったり、Ajaxと組み合わせて利用すると利用できない場面がある、など開発者泣かせのタグでもあります。[sad]

そんなiframeの欠点を補うらしい?Ajaxスクリプト、Uframeを試してみました。
jQueryを利用します。
.NETのUpdatePanelと併用するといい感じらしいのですが、ここでは通常のHTMLに組み込む方法をご紹介します。

公式?サイト
UFRAME: goodness of UpdatePanel and IFRAME together

以下、利用方法です。

  1. 上記のサイトにアクセスし、Source Codeというタブをクリック
  2. 右上のLatest Version Downloadというリンクをクリックしてダウンロード
  3. ファイルを解凍し、/trunk/UFrame-Scripts というディレクトリの中が、利用するJavascript本体です。
  4. ここからは、HTMLに書き込んでいきます。jquery-1.2.3.js、htmlparser.js、UFrame.jsを読み込みます。
  5. 後は、次のように
    にsrcを指定するだけ。
  6.  <div id="UFrame1" src="iframe_test_content.html" class="UFrame">
      <p>This should get replaced with content from Somepage.aspx</p>
     </div>
    
    1. インラインフレーム風にするために、次のスタイルを設定します。
     div.UFrame { 
        width: 300px; 
        height: 300px; 
        overflow: scroll; 
        border: 1px solid black; 
        background-color: white; 
        color:black; 
        padding: 5px }
    

    これで終わりです。なんとも簡単です。

    サンプルを下記に置きましたので、HTMLコーディングなどは参考にしてみてください。
    UFrameを利用した、iframe風の利用

    注意点

    読み込む先に、文字エンコーディングの指定

     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    

    があると、エラーになってしまうようです。

    利用した感想としては、すごく使いやすい!というほどのこともないかもしれません。
    何かiframeで困ったときのために、こういうものもある、と知っておいて損はないでしょう。

    overflowの中にiframeを入れるとIE6で崩れる

TortoiseSVN ファイルとディレクトリの移動

システム開発

TortoiseSVN ファイルとディレクトリの移動

TortoiseSVN は使いやすいSVNクライアントですが、ちょっと分かりにくい操作もあります。ここではファイルとディレクトリの移動について説明します。
移動したいファイルをマウスの「右ボタン」で移動したいフォルダへドラッグします。すると、SVNのMove/Copy/Exportに関するコンテキストメニューが表示されます。
SVNで管理したまま移動したい場合は、「SVN Move versioned files here」を選択します。