2012年5月24日木曜日

UITextViewにactionを設定する方法(UIButtonの上にUITextViewをのせるとボタンが反応しなくなる)

UIButtonの上に、UITextViewを配置したら、
UIButtonに設定したアクションが効かなくなってしまった。 

それもそのはず、UITextViewが一番上の層にあるので、
それが邪魔をしてUIButtonが反応しないのだ。 

そんな時は、 ボタンの色を透明に設定してあげれば大丈夫。
 (なんですぐに気づかなかったんだろう、、)

 -----
//ボタンを設置する(アクションはshow_view1を設定)   
self.view1 = [[UIButton buttonWithType:UIButtonTypeCustom] retain]; self.view1.frame = CGRectMake(10, 10, 300, 60);
self.view1.backgroundColor = [UIColor clearColor];
 [self.view1 addTarget:self action:@selector(show_view1:) forControlEvents:UIControlEventTouchUpInside];
 [self.wv insertSubview:view1 atIndex:2];  //テキストビューを配置する   
self.lbl1 = [[UITextView alloc] initWithFrame:CGRectMake(90, 10, 220.0, 60.0)];
 self.lbl1.font = [UIFont fontWithName:@"HiraKakuProN-W6" size:14];
 self.lbl1.textAlignment = UITextAlignmentLeft; self.lbl1.editable = NO;
 self.lbl1.scrollEnabled = NO; self.lbl1.userInteractionEnabled = NO;
 self.lbl1.textColor = [UIColor colorWithRed:72/256.0 green:88/256.0 blue:89/256.0 alpha:1.0f]; 
self.lbl1.backgroundColor =[UIColor whiteColor];
 self.lbl1.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight; self.lbl1.text = @"あsdふあsdふぁsdふぁsdふぁsdふぁsだsdf"; [self.wv insertSubview:lbl1 atIndex:1];

 ----

 これでボタンもしっかり反応させることが出来ましたー!!

2012年5月21日月曜日

facebookアプリ  Mobile Web URL(モバイルWebアプリ)に指定するURL

facebookアプリのMobile Web URL(モバイルWebアプリ)に指定するURLは、
iphoneやAndroidでアプリを表示させるために指定するURLです。

これは、https://〜で始まるもので、
iphoneやandroidで表示させることが出来るURLを指定しましょう。

App Namespaceに指定するものとは facebookアプリ

App Namespaceに指定するものは、
アプリのURLになるものです。

https://apps.facebook.com/(App Namespace)/

こんな感じ。
なので、他のアプリとかぶってはいけないし、
アプリの内容が何となく認識できるものがいいのではないでしょうか。


https://apps.facebook.com/(App ID)/

こんな感じのapp IDでもアプリにつながりますが、
本当はApp Namespaceを指定してあげた方が、
ユーザーには分かりやすいURLにすることが出来るでしょう!

facebookアプリ canvasbookmarkからアクセスされたときにアプリを表示する方法

facebookアプリを自分のマイページ?にダウンロードをすると、
ページの右上に、アプリが並ぶのですが、
そこからアクセスされたときに、きちんとアプリを表示させるには、
ユーザーのステータスを判断して表示をさせないといけません。

facebookのページの右上からアプリをクリックした時は、
以下のようなURLになります。

https://apps.facebook.com/(指定した名前かapp ID)/?fb_source=canvasbookmark&count=0

ここのURLで何かを表示するには、

-----

FB.getLoginStatus(function(response) {


if (response.status === 'connected') {

//ログインできてる場合
document.write('ログインできてます');


} else if (response.status === 'not_authorized') {
//アプリに接続していない場合
document.write('アプリに接続していません');


} else if (response.status === 'authorized') {
//アプリに接続している場合
document.write('★ここに指定★');


} else {
//その他(ログインしていない場合など)


}


}

------

こんな感じで、
response.status === 'authorized'
というユーザーがアプリを許可している場合の判定を行なって、
表示内容を変更しましょう!





2012年5月12日土曜日

iphoneアプリ iphoneのステータスバーを消す方法

iphoneのページ上部に付いている、
時計や電池マーク、WEBの読み込みマークなどを消すには、
info.plistに設定するのがオススメ。


info.plistにUIStatusBarHiddenを追加して、
チェックを入れたらアプリ実行時に非表示になります!


iphoneアプリ UIWebviewを呼び出しながら、UIActivityIndicatorViewを表示する方法

UIWebViewを表示させるとき、読み込みにちょっと時間がかかるので、
ユーザーにページを読み込み中である事を
アピールするために、ページの真ん中に、
ページ読み込み中はくるくる回るアイコンを表示させたいと思います。

ただ、ちょっとハマったのでメモ。

【UIWebViewにUIActivityIndicatorViewを表示させるポイント】
●UIWebViewの背景が白いと、インジケーターが表示されていても見えない。
●WEBの読み込み開始時と、読み込み終了時にインジケーターを表示、非表示させる。

ということで、
早速コードになります。

uiwebview.h------


#import <UIKit/UIKit.h>

@interface uiwebviewViewController : UIViewController<UIWebViewDelegate> {
UIWebView *wv;
UIActivityIndicatorView* indicator;
}

@property (nonatomic, retain) UIWebView *wv;
@property (nonatomic, retain) UIActivityIndicatorView *indicator;


@end

-------

まずは、WEBを表示させるUIWebViewを用意。
インジケーターも用意します。

uiwebview.m------

@implementation uiwebviewViewController

@synthesize wv;
@synthesize indicator;

-(void)viewDidLoad {
[self.view setBackgroundColor:[UIColor colorWithRed:247/256.0 green:232/256.0 blue:186/256.0 alpha:1.0f]];

//webview1を作成
self.wv = [[UIWebView alloc] init];
self.wv.delegate = self;
self.wv.frame = CGRectMake(0, 40, 320, 420);
self.wv.backgroundColor = [UIColor redColor];
self.wv.alpha = 0.9;
self.wv.scalesPageToFit = YES;
NSURL *url = [NSURL URLWithString:@"ここに読み込むHTMLを記入"];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
[self.wv loadRequest:req];
[self.view addSubview:self.wv];

//インジケーターを用意する
self.indicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
self.indicator.frame = CGRectMake((320/2)-20, (480/2)-60, 40, 40);
[self.view addSubview:self.indicator];
}


//WEBの読み込みを開始したら
- (void)webViewDidStartLoad:(UIWebView*)webView {
//インジケーターの表示
[indicator startAnimating];
}

//WEBの読み込み成功したら
- (void)webViewDidFinishLoad:(UIWebView*)webView {
//インジケーターの非表示
[indicator stopAnimating];
}

//WEBの読み込みに失敗したら
- (void)webView:(UIWebView*)webView 
didFailLoadWithError:(NSError*)error {
//インジケーターの非表示
[indicator stopAnimating];
}

// ページ読込開始時にインジケータをくるくるさせる
// ※これは、ページの上の時間とかが表示されてるところに表示させるやつです。
-(void)webViewDidStartLoad:(UIWebView*)wv{
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}
-(void)webViewDidFinishLoad:(UIWebView*)wv{
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

- (void)dealloc {
[wv release];
[indicator release];
[super dealloc];
}

@end

-------


以上です!
ぜひお試しください。

2012年5月10日木曜日

googleアップエンジンでWEBサイトを立ち上げる!app.yamlの設定について

最初に入っているapp.yamlの中身は以下の感じ。
※XXXXはアプリの名前です。


---

application: XXXXX
version: 1
runtime: python
api_version: 1


handlers:
- url: /favicon\.ico
  static_files: favicon.ico
  upload: favicon\.ico


- url: .*
  script: main.py
---

これを、以下の様に書き換え。


---


application: XXXX
version: 1
runtime: python
api_version: 1


handlers:
- url: /
  static_files: htdocs/index.html
  upload: /
- url: /
  static_dir: htdocs


---




こう設定することで、
WEBページを表示させることが出来ました!



facebookアプリのAn active access token must be used to query information about the current user.エラーに悩まされる

facebookアプリを作っているのですが、またつまずいて、やっと解決したので、
それをご報告したいと思います。

今作ってるアプリは、
ログイン⇒ユーザーへの認証⇒自動投稿

という感じの流れなのですが、
自動投稿をすると、うまくいくときもあれば、
エラーで「An active access token must be used to query information about the current user.」と
返ってきてしまうことがありました。

最初は、アクセストークンの認証が切れているのではと思い、
検索してみました。

アクセストークンは、2時間程度で認証が切れてしまうということで、
offline_access」というものを使えば、
認証の時間を長くすることが出来るようです。
(以前は無期限だったのが、2012年5月2日以降は60日間の期間になってしまったみたいです。)

ただ、「offline_access」を指定しても、
エラーが解消されません。

次に調べてみたのは、「/me/feed」を使っていると、
エラーが起こる可能性があるということです。


▼ここの記事について詳細が書かれていました。
http://fb.dev-plus.jp/forum/topic.php?id=67


ただ、英語すぎて私にはちょっと難しすぎました><


それでやっとたどり着いたのが、
FB.apiを使用しているときに、一緒に投稿する画像を指定しているのですが、
その画像を相対パスで書いていたことが問題でした。


以下のコードを、次のように書き換えたら、
あっさりエラーが解消されたのです。


【誤】-------------


function publishStream1()
{
    FB.api('/me/feed', 'post',
    {
        picture : "images/kekka.gif?type=large", 
    message : "メッセージを入れる",
    link :  "http://XXXXXX/",
        name : "リンク先の名前",
    caption : "キャプションを指定",
     description : "ディスクリプションを指定"
    },
    function (response)
    {
        if (!response || response.error) {
            alert(response.error);
        }
        else {
            alert('投稿が完了しました!');
        }
    });
}


-------------



【正】-------------


function publishStream1()
{
    FB.api('/me/feed', 'post',
    {
        picture : "http://XXX/images/kekka.gif?type=large", 
    message : "メッセージを入れる",
    link :  "http://XXXXXX/",
        name : "リンク先の名前",
    caption : "キャプションを指定",
     description : "ディスクリプションを指定"
    },
    function (response)
    {
        if (!response || response.error) {
            alert(response.error);
        }
        else {
            alert('投稿が完了しました!');
        }
    });
}


-------------

てっきり、同じサーバーに画像をアップしているので、
スクリプト内も相対パスでいいんだと思っていました。

でも違ったんですね、
絶対パスで指定したらエラーが解消しました。

facebookhは、ほんとにいろんなところでつまづきます、、><

2012年5月9日水曜日

htmlをかく際のテンプレート


毎回作るのが面倒なので、
ここでコピペできる様にしておきたいと思います。


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-language" content="ja">
<meta charset="UTF-8">
<meta name="author" content="●●">
<title>●●</title>
<meta name="description" content="●●" />
<meta name="keywords" content="●●" />
<meta http-equiv="Content-Style-type" content="text/css">  
<meta http-equiv="Content-Script-Type" content="text/javascript" />





<!-- facebook -->
<meta property="og:title" content="●●"/>
<meta property="og:url" content="●●"/>
<meta property="og:image" content="●●/fb_ogp.jpg"/>
<meta property="og:description" content="●●" />
<!-- end facebook -->
<!-- facebook common -->
<meta property="og:type" content="blog"/>
<meta property="og:site_name" content="●●">
<meta property="fb:app_id" content="●●" />
<!-- end facebook common -->



<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>


</body>
</html>

2012年5月8日火曜日

UIWebViewをマスター!クラスにプロトコルを実装する方法(iphoneアプリ)

UIWebViewを使ってみようと思い、
いろいろ調べながら作っていると以下のエラー?警告文が…!


class webviewViewController does not implement the UIWebViewDelegate protocol



直訳すると、
クラスwebviewViewControllerUIWebViewDelegateプロトコルを実装していません。




プロトコルって何だ、、
いろいろ調べてみたら、.hファイルにちょっと文字を追加するだけ!


-------



@interface uiwebviewViewController : UIViewController<UIWebViewDelegate> {
      UIWebView *_webView;
}

-------

これでクラスにプロトコルを実装することが出来ました。

2012年5月7日月曜日

Xcode3でtest frightにアプリをアップロードする方法!その③アプリをアップロードしよう

















test frightにアプリをアップロードするには、どうやら、
IPAというファイルにしないといけないようです。

ですが、IPAっていったい何もの!?
よくわからないながらも調べながら無事アップロードすることが出来ました。

まずは、アップロードしたいアプリのプロジェクトをXcodeで開きます。
xcode画面の左上でDeviceを選択します。






















「ビルド」メニューの「Build and Archive」を選択します。
Xcode4では、「product」メニューの「Archive」らしく、迷ってしまいました。。





アーカイブを選択すると、以下のオーガナイザ画面が出てきます。
「share」ボタンを押して、apiファイルを作成します。




Save to Disk...を選択すると、指定した場所にapiファイルが出来ています!











早速出来たファイルを、test frightにアップロードして、アプリをビルドしたファイルをアップさせることが出来ました!







Xcode3でtest frightにアプリをアップロードする方法!その②チームのメンバーを登録しよう!
















Invite a teammateから、
E-mail Adressと、メッセージを入力して招待したい人にメールを送りましょう。

メールを送る際は、iphoneで確認できるメールアドレスを選択すると
そのまま確認&アプリのインストールが出来るのでおすすめです。

メッセージは必須ではないのに、
空のまま送ろうとしたら、必須項目ですというエラーが出てしまいました。。

何かしら記入してメールを送るといいかも知れません。

次は、アプリのアップリードの方法です!

Xcode3でtest frightにアプリをアップロードする方法!その①test frightに登録しよう

test frightとは、iphoneアプリを、サイトに登録することで、
いろんな人とアプリを共有することが出来るサービスです。
まだリリース前の開発中のアプリをみんなで共有することが出来る便利なサービス!

ぜひ、お試しください!
まず始めに、test frightに登録することでサービスを利用できます。
https://testflightapp.com/


















右上のSign upボタンから登録して下さい。
名前、メールアドレス、パスワードを登録して、
developperの所をオンにして登録して下さい。




























これでtest frightの登録は終了です!
次はアプリを一緒に見れるユーザーを登録します。

2012年5月6日日曜日

UITextViewの文字を編集できない様にするeditable(iphoneアプリの作り方)


UITextViewの文字を編集できない様にするは、editableを利用します。
editableは、(BOOL)を返します。

 YES:編集可
 NO:編集不可

(例)self.uitext.editable = NO;

iphoneアプリでリンクをつける方法(UIApplication sharedApplication)objective-c


iphoneアプリを作っていて、ボタンを押したら
他のWEBページに遷移するリンクを作りたいと思います!

HTMLなら、
<a href="http://〜"></a>で囲むだけでリンクになるのですが、
objective-cではそんな簡単にはいきません。。

まずは、リンクを張るためのボタンを作ります。
//-- カスタムボタンの設定 
self.os_btn1 = [[UIButton buttonWithType:UIButtonTypeCustom] retain];

//-- カスタムボタンのサイズと位置を指定します。
self.os_btn1.frame = CGRectMake(0.0, 20.0, 100.0, 60.0);

//-- カスタムボタンの画像を指定します。@""の中に、保存した画像の名前を入れましょう。
[self.os_btn1 setImage:[UIImage imageNamed:@"kenshou.gif"] forState:UIControlStateNormal];

//-- カスタムボタンが押されたときの画像を指定します。
[self.os_btn1 setImage:[UIImage imageNamed:@"kenshou.gif"] forState:UIControlStateHighlighted];

//ボタンの背景色を選択します。
self.os_btn1.backgroundColor = [UIColor whiteColor];

//ボタンが押された時のメソッドを指定します。
self.os_btn1.reversesTitleShadowWhenHighlighted = YES;
[self.os_btn1 addTarget:self action:@selector(btn1_1:) forControlEvents:UIControlEventTouchUpInside];



//ボタンが押された時のメソッド内に、リンク先を指定します。
-(void)btn1_1:(id)sender {
NSURL *url1 = [NSURL URLWithString:@"http://〜"];
[[UIApplication sharedApplication] openURL:url1];
}


ぜひ試してみて下さい!

UI segmented Controlの使い方(iphoneアプリ)objective-c


iphoneアプリのlibraryにもある「segmented Control」
ボタンを切り替えながらアクションを追加する方法をご紹介したいと思います。

















//ボタンを設置する方法はこんな感じです。最初はボタンの中に表示する文字を書きます。
self.arr = [NSArray arrayWithObjects:@"おすすめ", @"ランキング", nil];
self.seg = [[[UISegmentedControl alloc] initWithItems:arr] autorelease];


//ボタンのサイズを指定します。(上の余白、左の余白、横幅、高さ)の順番です。
self.seg.frame = CGRectMake(10, 10, 250, 30);

//ボタンのスタイルを設定します。
self.seg.segmentedControlStyle = UISegmentedControlStyleBar

//ボタンのどこが選択されているかを指定します。(今回は1番目を選択
self.seg.selectedSegmentIndex = 1

//値が変更された時にchangepageメソッドを呼び出す
[self.seg addTarget:self action:@selector(changepage:) forControlEvents:UIControlEventValueChanged];

//viewにボタンを追加します。
[self.view addSubview:self.seg];


次にメソッド内の書き方です。
今回は、ボタンを表示するごとに、指定したviewを切り替えることを
行いたいと思います。

-(void)changepage:(UISegmentedControl*)seg{
    // ここにボタンを押されたときにどんな処理を行うか記述する
    // 引数の seg には呼び出し元のUISegmentedControlオブジェクトが引き渡されてきます
if(self.seg.selectedSegmentIndex == 0){
self.uv.hidden = YES;
self.uv2.hidden = NO;
}
if(self.seg.selectedSegmentIndex == 1){
self.uv.hidden = NO;
self.uv2.hidden = YES;
}
}


viewの表示/非表示は、
uv.hidden = NO;
uv.hidden = YES;
で行えます。




‘Local Declaration of "●●" Hides Instance Variable’コンパイラ警告の回避方法

よく、コンパイラをすると、
‘Local Declaration of  "●●" Hides Instance Variable’というエラーが出る事がある。

直訳すると、ローカル変数の●●は、インスタンス変数を隠しています。

ローカル変数と、インスタンス変数は、
かぶらない様に、違う名前にしましょう◎


2012年5月3日木曜日

facebookアプリの191エラー、SSLサーバー設定、javascript SDKなどの解決法!

facebookアプリを作っていて、javascript SDKを使っているのだが、
情報が少なすぎたり、情報が古すぎたり、英語のサイトで全然読めなかったり、
かなり苦労していました。。


SSLが使えないといけないサーバーだったり、
全然知識のない私にはかなりの重労働でした。。
191エラーが出てしまったり、よくわからないことが多すぎる!!

いろいろ調べても分からなかったので、
詳しい方(松 ロドリゲス 翔)に、少し教えていただきました。

まずはサーバーにアップしているindex.htmlの中身。


■index.html
//最初にjavascript SDKを使うために、SDKをダウンロード??

<script>
window.onload = function(){
    var element = document.createElement('script');
    element.src = document.location.protocol + '//connect.facebook.net/ja_JP/all.js';
    document.getElementById('fb-root').appendChild(element);
}

//アプリを初期化します
window.fbAsyncInit = function(){
    FB.init({
        appId  : 'アップIDを登録',
        status : true,
        cookie : true,
        xfbml  : true,
        oauth  : true
    });

//ユーザーのログイン状態を調べます。
    FB.getLoginStatus(function(response) {
        if (response.status === 'connected') {

        //ログインできてる場合はここに処理を書きます。
            document.write('loginok');

        } else if (response.status === 'not_authorized') {
        //アプリに接続していない場合
            location.href = 'https://www.facebook.com/dialog/oauth?client_id=アップID&redirect_uri=https://apps.facebook.com/アップID/';

        } else {
        //ログインしていない場合
            document.write('ログインしてくださーい');
        }
    });
}
</script>

■facebook Developerの中身


ウェブサイト
サイトURL
https://apps.facebook.com/アップID/

Facebook上のアプリ
キャンパスURl
http://〜

セキュリティで保護されたキャンバスURL
https://〜


ウェブサイトのサイトURLを、
facebookのアプリのURLにしたら、
なんとかうまく動きました!!

明日こそ、ちゃんとアプリが動く様に頑張りますー!







2012年5月2日水曜日

IE6でborderが消えてしまうバグの対処方法

IE6以下のバージョンでは、子要素でfloatを使用すると、
親要素のborderが消えてしまうというバグがあります。

IE6はもうかなり古いブラウザですが、そうは言っても
まだまだ多くのユーザーがいることも確かです。

そんなバグの対策には、
親要素に横幅を指定してあげることで対策することが出来ます!

---
width:****px;
---


また、IE6にだけ幅指定を効かせたい場合は、
CSSの最初に「_」を付けることで、IE6にのみCSSを効かせることが出来ます。



---
_width:****px;
---

ぜひお試し下さい!

2012年5月1日火曜日

facebookアプリ(アプリをページタブに追加する方法)アプリの承認について

Facebook IDなどを使用する場合は、すべてアプリの利用者によるあなたのアプリの承認が必要です。
ユーザーの承認がないと、アプリの中でユーザーの名前などの情報を取得することが出来ません。

承認を行うためには、 Facebookアプリ用のOAuthダイアログをしようすることになります。
以下のURLをクリックし、OAuthダイアログを呼び出してください。


---
https://www.facebook.com/dialog/oauth? client_id=YOUR_APP_ID&redirect_uri=YOUR_CANVAS_PAGE

---

太字の
YOUR_APP_IDと、YOUR_CANVAS_PAGE
はそれぞれ任意のものに置き換えてください。

YOUR_APP_ID:facebook app ID
YOUR_CANVAS_PAGE:キャンバスページのURL(http://~)


ユーザーが許可をするをクリックしたら、アプリが承認され、
OAuthダイアログはブラウザーをredirect_uriパラメーターで渡されていたURLへリダイレクト
(HTTPステータスコード302)します。

アプリが承認されたら、それに続くリクエストからsigned_requestパラメーターには次の情報が設定されます。