0

現在、私の iPhone アプリ (Pocket のような、最初の起動後にユーザーが少し実践する) の 2 つの紹介ページ (最初に画像を表示し、2 番目に Web サイトを表示する必要があります) に取り組んでいます。および とGitHub完全に連携するMatthew York のプロジェクトに出会いました。さらに、紹介の一部としてウェブサイトを表示したいのですが、うまくいきません。作成したものが表示されません。imagestextprogrammaticallyUIWebView

マシュー・ヨークのGitHubプロジェクト: https://github.com/MatthewYork/iPhone-IntroductionTutorial

2 つの紹介ページを表示するための完全なコードを以下に示します。panelImage期待どおりに動作しますが、そうではないことに注意してくださいpanelView。2 番目のページが表示されますが、UIWebView. 画面に表示されないに追加すると思うので、表示されませsubviewん。view私は正しいですか?ご覧いただけますか: [view addSubview:aWebView];in method:showWebView

ViewController.m

- (void)showIntro
{
    MYIntroductionPanel *panelImage = [[MYIntroductionPanel alloc] initWithimage:[UIImage imageNamed:@"img.jpg"] description:@"TEST: IMAGE"];

    MYIntroductionPanel *panelView = [[MYIntroductionPanel alloc] initWitView:[self showWebView] description:@"TEST: VIEW"];

    MYIntroductionView *introductionView = [[MYIntroductionView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) headerText:@"TESTING" panels:@[panelImage, panelView] languageDirection:MYLanguageDirectionLeftToRight];

    introductionView.BackgroundImageView.image = [UIImage imageNamed:@"BG_iPad_1024.png"];
    introductionView.delegate = self;
    [introductionView showInView:self.view];
}

- (UIView *)showWebView
{
    UIWebView *aWebView= [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 290)];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]];
    [aWebView loadRequest:requestObj];

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 300)];
    [view addSubview:aWebView];

    return view;
}

MYIntroductionPanel.m

-(id)initWitView:(UIView *)view description:(NSString *)description{
    if (self = [super init]) {
        self.view = [[UIView alloc] init];
        self.Description = [[NSString alloc] initWithString:description];
    }
    return self;
}

-(id)initWithimage:(UIImage *)image title:(NSString *)title description:(NSString *)description{
    if (self = [super init]) {
        self.Image = [[UIImage alloc] init];
        self.Image = image;
        self.Title = title;
        self.Description = [[NSString alloc] initWithString:description];
    }
    return self;
}
4

2 に答える 2

0

UIWebView追加先のビューは、ビュー階層自体には追加されません。UIWebView のスーパービューを MyIntroductionPanel のinitWithView:description:メソッドに渡しているように見えますが、そのメソッドはその入力ビューを無視し、self.view = [[UIView alloc] init]. self.view = view代わりに initWithView:description: メソッドで設定してみてください。

于 2013-03-28T17:26:11.733 に答える
-1

私は著者の決定のすべてを気に入ったわけではありませんが、あなたが探しているものを達成するために彼のパターンに従いました.

以下を追加しました。

// MyIntroductionPanel.h
@property (nonatomic, retain) NSURL *url;

-(id)initWithURL:(NSURL *)url;

// MyIntroductionPanel.m
-(id)initWithURL:(NSURL *)url {

    if (self = [super init]) {
        _url = url;
    }
    return self;
}

それは簡単でした。これはそれほど簡単ではありませんでした - レイアウト方法をハッキングして、URL を持つパネルを処理しました。私はこの方法を理解しようとはしませんでした。機能させるためにできることを追加しただけです。私の追加は // DANH でマークされています

//  MYIntroductionView.m

-(UIView *)PanelViewForPanel:(MYIntroductionPanel *)panel atXIndex:(CGFloat*)xIndex{

    // snipped original code    

    NSInteger descriptionHeight = panelDescriptionTextView.contentSize.height;
    int contentWrappedScrollViewHeight = 0;
    if ((imageHeight + descriptionHeight + panelTitleLabelFrame.size.height) > maxScrollViewHeight) {
        contentWrappedScrollViewHeight = maxScrollViewHeight;
        imageHeight = contentWrappedScrollViewHeight-descriptionHeight - panelTitleLabelFrame.size.height - 10;
    }
    else if ((imageHeight+descriptionHeight + panelTitleLabelFrame.size.height) <= maxScrollViewHeight){
        contentWrappedScrollViewHeight = imageHeight + panelTitleLabelFrame.size.height + descriptionHeight;
    }

    // DANH
    if (panel.url) {
        contentWrappedScrollViewHeight = 300;
        // you can certainly do a better job than I did here, but just to get going
    }

    panelView.frame = CGRectMake(*xIndex, 0, self.ContentScrollView.frame.size.width, contentWrappedScrollViewHeight);

    //Build image container
    UIImageView *panelImageView = [[UIImageView alloc] initWithFrame:CGRectMake(5, 0, self.ContentScrollView.frame.size.width - 10, imageHeight)];
    panelImageView.contentMode = UIViewContentModeScaleAspectFit;
    panelImageView.backgroundColor = [UIColor clearColor];
    panelImageView.image = panel.Image;
    panelImageView.layer.cornerRadius = 3;
    panelImageView.clipsToBounds = YES;
    [panelView addSubview:panelImageView];

    // DANH
    // add webview on top if we have a url
    if (panel.url) {
        UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.ContentScrollView.frame.size.width, 300)];
        [webView loadRequest:[NSURLRequest requestWithURL:panel.url]];
        [panelView addSubview:webView];
    }

    // snipped original code    

}

さて、サンプルコードで呼び出すには....

// MYViewController.m

MYIntroductionPanel *panel3 = [[MYIntroductionPanel alloc] initWithURL:[NSURL URLWithString:@"http://www.google.com"]];

// ...
MYIntroductionView *introductionView = [[MYIntroductionView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) headerText:@"MYIntroductionView" panels:@[panel, panel2, panel3] languageDirection:MYLanguageDirectionLeftToRight];
于 2013-03-28T17:28:07.463 に答える