ページ 11

アクションシートからの画面遷移(xcode)

Posted: 2012年4月16日(月) 12:46
by bluedog
グラフィックデザイナーをやっています。
iPhoneアプリXCODEは初心者なのですが
カタログアプリ開発案件が入ったので独学で勉強しています。

下記のところまで開発したのですが、それ以降が手も足も出ない状態です…。

忙しいところ申し訳ありません。ご教授をお願い出来たらとおもいます。


依頼内容が下記と同じ様なアプリです。
http://appliguide.jp/app/detail?id=1763

画像をスクロールできて「商品を見る」ボタンを押すと、その画像ページの商品WEBページを見れる仕様です。
URLは画像商品ページごとに変わる仕様となってます。

これと似た様なオープンソースが下記になります。
https://github.com/mwaterfall/MWPhotoBrowser

このオープンソースのLocal photosを使い上記カタログのようなアプリを作っています。


アクションシートの
■SAVE
■COPY
■Email
■CANCEL

とありますが
SAVE部分を「商品を見る」ボタンに変更
Emailはそのまま

という感じです。

やろうとしているのは

「まず「商品を見る」は、UIWebView を載せた UIViewController を作り、それを表示させる。MWPhotoBrowser.m の 1026行目付近で「Save」ボタンを押した時に savePhotoメソッドを呼ぶ様になっているのでここに用意した UIViewControllerを呼び出す処理を書く。UIViewController はモーダル表示で。」です。

そして1画面ごとに「商品を見る」を押すと、その商品のURLに繋がるようにしたいのですがさっぱりわからずで…

調べたところ、

「ボタンを押したらウェブサイトにつながることを利用して、ボタンにタグをつけます。そしてそのタグが押されたときにたとえばWebViewControllerがよび出されるわけです。そんでもって、WebViewControllerのにアクセサ(@property)を通して、それをNSInger webNumのような感じで書きます(たとえば@property (nonatomic,assign) NSInteger webNum;)。すると、ボタンを押した後にその数字の情報がWebViewControllerにいくので、その数字を使って、あらかじめ使うURLを配列にしておいたものにアクセスする。それを読み出すということです。そうすればWebViewControllerを使い回せます。」

という回答がかえってきました。


モーダル表示部分のコードは下記のようにしたら画面遷移はするのですが画面が真っ暗になってしまいます。

コード:

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
    if (actionSheet == _actionsSheet) {           
        // Actions
        self.actionsSheet = nil;
        if (buttonIndex != actionSheet.cancelButtonIndex) {
            if (buttonIndex == actionSheet.firstOtherButtonIndex) {
                webViewController* web = [[webViewController alloc] init];
                web.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
                UINavigationController *NavigationController =
                [[UINavigationController alloc] initWithRootViewController:web];
                [self presentModalViewController:NavigationController animated:YES];


webを表示させるUIViewControllerは下記のように書きました。(フォルダ名はwebViewController)

▼webViewController.h

コード:

#import <UIKit/UIKit.h>

@interface webViewController : UIViewController{
    
}

@property (retain, nonatomic) IBOutlet UIWebView *web;
@end

▼webViewController.m

コード:

#import "webViewController.h"

@implementation webViewController
@synthesize web;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];
    
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad


{
    [super viewDidLoad];
    NSURL *url = [NSURL URLWithString:@"https://www.google.co.jp/"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [self.web loadRequest:request];
    // Do any additional setup after loading the view from its nib.
}


- (void)viewDidUnload
{
    [self setWeb:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

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

- (void)webViewDidStartLoad:(UIWebView *)webView{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}

#pragma mark 初期処理
    


@end

どのようにコードを書けば、画面真っ暗ではなく表示されるでしょうか?
また各ページで「商品を見る」ボタンを押すごとに、商品WEBページのURLを変えていくことをできるでしょうか?
提出期限の関係で明日、明後日には解決したいとおもっております。
ご教授お願い致します。

Re: アクションシートからの画面遷移(xcode)

Posted: 2012年4月16日(月) 20:26
by h2so5
黒く表示されているのは、UIWebViewのインスタンスが作られていないからではないかと思います。
InterfaceBuilderでアウトレットを接続するか、またはコードで直接生成する必要があります。

Re: アクションシートからの画面遷移(xcode)

Posted: 2012年4月16日(月) 20:53
by h2so5
商品WEBページのURLがどのようにして与えられるのか不明ですが、
webViewControllerの初期化時に引数でURLを渡すサンプルコードを書いてみました。

webViewController.h

コード:

#import <UIKit/UIKit.h>

@interface webViewController : UIViewController{
    
}

@property (retain, nonatomic) IBOutlet UIWebView *web;
@property (copy, nonatomic) NSString *urlString;

- (id)initWithUrlString:(NSString *)url;

@end
webViewController.m

コード:

// 前略

- (id)initWithUrlString:(NSString *)url
{
    self = [super init];
    if (self) {
        // Custom initialization
        self.urlString = url;
    }
    return self;
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSURL *url;
    if ([self.urlString length] > 0) {
        url = [NSURL URLWithString:self.urlString];
    } else {
        // URLが指定されていないときのデフォルト
        url = [NSURL URLWithString:@"https://www.google.co.jp/"];
    }
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [self.web loadRequest:request];
    // Do any additional setup after loading the view from its nib.
}

- (void)dealloc {
    [web release];
    [urlString release];
    [super dealloc];
}

コード:

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
    if (actionSheet == _actionsSheet) {           
        // Actions 
        self.actionsSheet = nil;
        if (buttonIndex != actionSheet.cancelButtonIndex) {
            if (buttonIndex == actionSheet.firstOtherButtonIndex) {
                // [self savePhoto]; return;

                // URLを渡して初期化
                webViewController* web = [[webViewController alloc] initWithUrlString:@"http://yahoo.co.jp"];
                web.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
                UINavigationController *NavigationController =
                [[UINavigationController alloc] initWithRootViewController:web];
                [self presentModalViewController:NavigationController animated:YES];
※このwebViewControllerの初期化部分は解放処理などを書いていないので、このままだとリークします。

Re: アクションシートからの画面遷移(xcode)

Posted: 2012年4月17日(火) 14:58
by bluedog2
回答ありがとうございます!!

真っ黒になってしまう件はコードで直接生成で解決いたしました。
商品WEBページのURLをページごとに変える件は、
エラーがたくさんでてしまい自分では出来なかったのですが、
別の方法でアクションシートの「商品を見る」ボタンを押すとWEB表示ができました。
しかし、それは固定された1ページのみのURLしか表示されないので
ここからURLをページごとに変える方法をご教授願いたいとおもいます。
新たにトピックをたてコードを記載しました。
ご教授願います。

Re: アクションシートからの画面遷移(xcode)

Posted: 2012年4月17日(火) 14:59
by bluedog3
新たなトピックはこちらです。
◎現在のページ数によって表示するURLを変える(XCODE)
ご教授お願い致します。