アーカイブ

‘プログラミング’ カテゴリーのアーカイブ

AmazonHtml をChrome 対応させてみたよ

AmazonHtml

AmazonHtml という@matubiz さん作成の素敵ブクマがあります。

Amazonの商品リンクを簡単に生成してくれるというブクマで、
@hiro45jp さんのAppHtmlから智の連鎖で生まれた素晴らしいブクマです。

 
アマゾン商品紹介用ブックマークレット「AmazonHtml」復活。Ver 2.0へ! | matuダイアリー

 
【近況】Bookmarkletを見直してます…。 | 普通のサラリーマンのiPhone日記

 

今のところChrome非対応

ただ、とても残念ながらChromeには非対応です。

AppHtmlが生成するHTMLがChromeの文字数制限をオーバーしてしまうからです。

商品候補はちゃんと表示されるのですが、最後のHTML生成「Result」が空のままなのです。

Resultsが空っぽ 

 

対応させてみた

こんなに便利なブクマがChrome で使えないのは悲しい。
と言うことで、ちょこっといじって対応させてみました。

やっつけなので[HTML選択]などのボタンはありません。
ですが、とりあえずHTMLを取得することは可能です。

テキストエリアが作成され、中にHTMLが出力されます。

 

改造方法

Chromeの制限に引っ掛かる部分を、以下の内容に書き換えます。

登録したブクマのソースコード末尾ちょっと手前に、以下の様な部分があります。

if(x)var r=prompt('Results.',x);

 
 

2012.05.18 追記

AmazonHtml2.0 には「ダイレクトモード」と呼ばれるAmazonページから直でHTMLを生成する機能があるのですが、その部分もソースコードの差し替えが必要です。

具体的には、先に挙げたif(x)var … で始まる部分の更に手前。

この部分です。

var r = prompt('Results.', x);

上記の部分も同様に以下の内容で書き換えます。

 

それを以下の内容に書き換えます。

コピー&ペーストで差し替えてしまいましょう。

if (x) {
    var textarea = document.createElement('textarea');
    textarea.setAttribute('style',
        'position:fixed;
              top:0px;
             left:0px;
          opacity:0.6;
            width:100%;
           height:20%');
    textarea.value = x;
    document.body.appendChild(textarea);
}

 

出来上がりはこんな感じ

出来上がりはこんな感じです。

 

David Flanagan
オライリー・ジャパン 2007-08-14
¥ 4,410

 



ツールバーのスワイプでキーボードを出し入れする

キーボードを手元の操作で出し入れしたいときに

ツールバーをちょいと上にスワイプするとキーボード出現。
ちゃッと下にスワイプするとキーボード収納。

ちなみに、この記事ではツールバーを使っていますが、
スワイプ検知を関連付けるのはツールバーじゃなくてもOKです。

 

1.スワイプ時に呼び出すメソッドを定義

スワイプ時に呼び出すメソッドを定義します。

(今回は単にUISearchBar にフォーカスをあてたり外したりするだけ。)

// 上方向スワイプ時の処理
- (void)swipeUpKeyboard:(id)sender {
    [self.searchBar becomeFirstResponder]; // 例)サーチバーにフォーカス
}

// 下方向スワイプ時の処理
- (void)swipeDownKeyboard:(id)sender {
    [self.searchBar resignFirstResponder]; // 例)サーチバーのフォーカスを外す
}

 

2.スワイプ方向に応じて処理を指定

viewDidLoad でツールバーにスワイプ方向に応じて処理の呼び出しを設定。

- (void)viewDidLoad {
    [super viewDidLoad];

    // ツールバー上スワイプ
    UISwipeGestureRecognizer* toUpSwipeGesture =
        [[UISwipeGestureRecognizer alloc]
         initWithTarget:self
         action:@selector(swipeUpKeyboard:)]; // 上スワイプ時処理を呼び出し
    toUpSwipeGesture.direction = UISwipeGestureRecognizerDirectionUp;
    [self.toolBar addGestureRecognizer:toUpSwipeGesture];

    // ツールバー下スワイプ
    UISwipeGestureRecognizer* toDownSwipeGesture =
        [[UISwipeGestureRecognizer alloc]
         initWithTarget:self
         action:@selector(swipeDownKeyboard:)]; // 下スワイプ時処理を呼び出し
    toDownSwipeGesture.direction = UISwipeGestureRecognizerDirectionDown;
    [self.toolBar addGestureRecognizer:toDownSwipeGesture];
}

 

3.キーボードの表示/収納を検知させる

ツールバーの位置はキーボードのタイプに応じて変わります。

viewWillAppear にNSNotificationCenter を設置。

キーボードの表示/収納を検知させて、ツールバーの位置を調整。

詳細は以下の過去記事を参照のこと。

【参考】

UIKeyboardDidHideNortification でキーボードの高さを取得しても、高さはゼロではない。 | 極上の人生

 

ちなみにTwitter での会話がきっかけ

とても便利に使わせて頂いているQuicka のアップデートがありまして。

その際にQuicka の作者@rakuishi07 さんとした会話が今回の記事のきっかけです。

「たしかモレスキンに書いていたな…」と。*01

 
Quicka 1.2(¥85)App
カテゴリ: 仕事効率化, ユーティリティ
販売元: rakuishi – KOICHIRO OCHIISHI(サイズ: 0.1 MB)
全てのバージョンの評価: (34件の評価)


 
FastEver – 素早く簡単にEvernoteにメモ 1.9.4(¥85)App
カテゴリ: 仕事効率化, ユーティリティ
販売元: rakko entertainment – rakko entertainment(サイズ: 1.3 MB)
全てのバージョンの評価: (1,457件の評価)

 


  1. ちなみに私はこれを@frnk さんと@isloop さんのやりとりから知りました。 []

UITextField でのリターンキー押し下げ時メソッド実装

UITextField でリターンキーを押した際の処理を実装する。

リターンキーと同時に、自前の処理を行わせたい場合などに使う。

 

1.UIViewController の.hファイルにUITextFieldDelegate プロトコル追加

@interface MyUIViewController : UIViewController <UITextFieldDelegate>

 

2.viewDidLoad 内でメソッドを適用したいtextField に自身をDelegate

- (void)viewDidLoad : (BOOL)animated {
    [super viewDidLoad:animated];

    [self.myTextField setDelegate:self];
}

 

3.textFieldShouldReturn メソッドを実装

- (BOOL)textFiledShouldReturn : (UITextField*)textField {
    // ここに自前のリターンキー押時処理
    [return YES];
}

 



push による画面遷移から「戻る」方法3つ

1.1つ前の画面に戻る

[self.navigationController popViewControllerAnimated:YES];

 

2.ルート画面まで一気に戻る

[self.navigationController popToRootViewControllerAnimated:YES];

 

3.任意の画面(UIViewController)まで戻る

[self.navigationController popToViewController:UIViewController animated:YES];

 



Xcode4.3 for Lion はターミナルでgccコマンドが効かない!?

MacのターミナルでC言語の練習環境を用意してみたよ

以前、このような記事を書きました。

ありがたいことに、今でも結構な数のアクセスを頂いております。

MacのターミナルでC言語の練習環境を用意してみたよ | 極上の人生

 
 

gccコマンドが効かない!?

さて、最近この記事に以下の様な質問コメントを頂きました。

“gcc と打ってもコマンドが見つからないと出てしまいます。
Xcode入れてからなにか操作がひつようなのでしょうか?”

はて?
Xcodeをインストールしてしまえば、gccなどのコマンドラインツールは手に入るはず…。
などと考えながらも、ググってみました。*01

キーワードは「Mac ターミナル gcc コマンドが見つからない」

 

Xcode4.3 for Lion(2012年02月公開)は
コマンドラインツールが自動インストールされないらしい

調べてみると、この様な記事がヒット。

Xcode 4.3でコマンドラインツールをインストールする手順 – FAMLog

 

どうやらXcode4.3 for Lion(2012年02月公開)は、
コマンドラインツールが自動インストールされないらしいです。*02

 

Xcode4.3 からコマンドラインツールをインストールする手順

そんなわけで、Xcode4.3 からコマンドラインツールをインストールする手順です。

 

流れ

Xcodeを開いて、以下の作業をするだけです。

  1. [Xcode]メニューを開く。
  2. [Preferences...]メニューを選択。
  3. [Downloads]タブを選ぶ。
  4. [Components]セグメントを選ぶ。
  5. [Command Line Tools]を選ぶ。
  6. [Install]を押して、コマンドラインツールをインストールする。

 

1.[Xcode]メニューを開く。

[Xcode]メニューを開きます。

MenuXcode

 

2.[Preferences...]メニューを選択。

[Preferences...]メニューを選択します。

TapPreferences

 

3.[Downloads]タブを選ぶ。

[Downloads]タブを選びます。

SelectDownload

 

4.[Components]セグメントを選ぶ。

[Componentes]セグメントを選びます。

SelectComponents

 

5.[Command Line Tools]を選ぶ。

[Command Line Tools]を選びます。

SelectCommandLineTools

 

6.[Install]を押して、コマンドラインツールをインストールする。

[Install]を押して、インストール開始。

TapInstall

 

インストール完了

コマンドラインツールのインストールは済みましたか?
それでは、もう一回こちらの記事でMacターミナルでC言語学習にチャレンジです!

 
MacのターミナルでC言語の練習環境を用意してみたよ | 極上の人生

 

あとがき

今回の記事のきっかけになったコメントを下さったNaoyuki 1205 さん、
お役に立ちましたでしょうか?

他にも「役に立った!」と言う方がいらっしゃいましたら、
ツイートでもFacebookのLikeでも反応頂けると嬉しいです。

 


  1. 【ググる】「Google で検索する」の意。でもYahooで検索することを「ヤフる」とはあまり聞かないですね。 []
  2. なんででしょね?やっといてくれれば良いのに。 []

UITextField に入力文字数制限を設定する

1.UITextFieldDelegateプロトコルを追加

.hファイルにUITextFieldDelegate プロトコルを追加する

@interface hogeViewController : UIViewController <UITextFieldDelegate>

 

2,setDelegateを実装

.mファイルのviewDidLoad にsetDelegate を実装

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.textField setDelegate:self];
}

 

3.文字数制限をかける

shouldChangeCharactersInRangeメソッドを実装し、内部で文字数制限をかける。

- (BOOL)textField:(UITextField*)textField
        shouldChangeCharactersInRange:(NSRange)range
        replacementString:(NSString*)string {

    int maxLength = 8;	// 制限文字数
    NSMutableString* text = [textField.text mutableCopy];
    1;

    return 1 <= maxLength;
}

 

おまけ

複数のtextFieldを持つ場合は、tag などで識別して処理を分岐させること。

 


UITableViewCell に[Delete]ボタンを表示させたい

セルを左スワイプすると出てくるアレ。

DeleteButton
 

実は、以下のメソッドを空で実装するだけでOK。

- (void)tableView:(UITableView*)tableView
    commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
    forRowAtIndexPath:(NSIndexPath*)indexPath {
}

 
 

【参考】

iPhoneアプリ開発、その(190) 削除するぜ!|テン*シー*シー



UITableViewController を継承しないでUITableView の選択解除をする

UITableView で行選択をすると、その行がハイライト表示に変わります。

で、通常はUITableViewController を継承しているので、viewWillAppear の中で[super viewWillAppear:animated]; とやっておけば、ハイライト解除もちゃんと行われるのですが、自前のUIViewにUITableViewを放り込んで使っている場合などUITableViewController を使わずにUITableViewを使用する場合があります。

そんなとき、UITableViewの選択解除を行う方法です。

 

方法

viewWillAppear メソッドの中でdeselectRowAtIndexPathを呼んでやる。

こんな感じ。

-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    UITableview* table = self.myTable;
    [table deselectRowAtIndexPath:[table indexPathForSelectedRow] animated:NO];

 

deselectRowAtIndexPath は選択状態を解除したい行のインデックスを要求してくるので、そこにindexPathForSelectedRow を使って「選択されている行のインデックス」を渡してやるのがポイント。

 



ActionSheet を使う【その2】選択時の処理

以前に書いた、この記事の続きです。

 
ActionSheet を使う | 極上の人生

 

上記の記事では、アクションシートの表示に関する内容だけでした。
今回は、表示されたアクションシートで、選ばれた項目ごとに処理を実行する部分。*01

 

1..h ファイルに UIActionSheetDelegate プロトコルを読み込む。*02

2..m ファイルに以下を実装。

- (void)actionSheet:(UIActionSheet*)actionSheet clickButtonIndex:(NSInteger)buttonIndex {
    // ボタンインデックス(buttonIndex)に応じてswitch 文で処理を分岐
    switch ( buttonIndex ) {
        case 0:
            // ここに一番最初のボタン用処理
            break;
        case 1:
            // ここに二番目のボタン用処理
            break;
        // ...
        default:
            上記のcase に該当しなかった場合の処理
            break;
    }
}

 

以上です。

 


  1. 「んなもん、まとめて書けよ」というツッコミはスルーです。 []
  2. まあ、これは前回の「ActionSheetを使う」でやっているはず…ですよね? []

NavigationController の「戻る」ボタンを消す

NavigationController の「戻る」ボタンを消すには、
viewDidLoad に以下の1文を追記するだけで良い。

- (void)viewDidLoad {
    [super viewDidLoad];

    // この1文を追記するだけ
    [self.navigationItem setHidesBackButton:YES];
}