0

アプリのスライダー コントロールに 10 個の異なるページが組み込まれています。これらのページは、ストーリーボードを使用して設定されています。

各ページの唯一の違いは、リッチ テキストを表示するための異なる Web ビューと、背景として使用される異なる画像です。

10 ページすべてに対して 1 つのビュー コントローラーを設定し、コンストラクターでいくつかのフラグを設定することは可能ですか? もしそうなら、これはどのように見えますか?

ありがとう、

ルイス。

4

2 に答える 2

1

MyViewController など、UIViewController のサブクラスを作成できます。次に、.h ファイルを次のように置き換えます。

#import <UIKit/UIKit.h>

@interface MyViewController : UIViewController

@property (nonatomic, strong) UIWebView *myWebView;
@property (nonatomic, strong) UIImageView *myImageView;

- (id)initWithURLString:(NSString *)urlString image:(NSString *)imageName;

@end

そして、あなたの .m ファイルは次のとおりです。

#import "MyViewController.h"

@interface MyViewController ()

@end

@implementation MyViewController

@synthesize myWebView = _myWebView;
@synthesize myImageView = _myImageView;

- (id)initWithURLString:(NSString *)urlString image:(NSString *)imageName
{
    self = [super init];

    if (self) {
        NSURL *url = [NSURL URLWithString:urlString];
        NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];

        _myWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 400)];
        [_myWebView loadRequest:urlRequest];

        _myImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]];
        _myImageView.frame = CGRectMake(0, 400, 60, 60);
    }

    return self;
}

@end

次に、UIViewController サブクラスのインスタンスを作成します。

MyViewController *vCon = [[MyViewController alloc] initWithURLString:someURLString image:imageName];
于 2012-10-18T10:59:18.210 に答える
1

View Controllerのデータソースを定義するのが最善の方法だと思います。このデータ ソースには、次のようなインターフェイスがあります。

@protocol MyVCDataSource
- (NSUInteger)numberOfPages;
- (NSString*)htmlContentForPageIndex:(NSUInteger)index;
- (NSString*)backgroundForPageIndex:(NSUInteger)index;
@end

ビュー コントローラーに、メソッドdatasourceで初期化されるというメンバーを指定します。initWithDatasource

@interface MyVC : UIViewController
...
@property (nonatomic, weak) id<MyVCDataSource> datasource;
- (id)initWithDatasource:(id<MyVCDataSource>)ds;

次に、View Controller は、必要に応じて HTML データまたはバックグラウンド ファイル名をデータ ソースに要求します。

- (void)viewDidLoad {

    self.view.backgroundColor = GET_BACKGROUND_FROM_STRING([self.datasource backgroundForPageIndex:self.currentIndex]);

    [self.webView loadHTMLString: [self.datasource htmlContentForPageIndex:self.currentIndex]];
....

}

プロトコルは文字列を返すだけだと思っていましたが、実際には、必要なもの (画像、色、URL など) を返すことができます。それはすべて、クラスの内部に依存します。

最後に、データソース オブジェクトは任意のオブジェクト (MyVCインスタンスも含む) であり、配列にインデックスを付けてそのデータを返すことができます。

- (NSString*)htmlContentForPageIndex:(NSUInteger)index {
    return [self.htmlPages objectAtIndex:index];
}

于 2012-10-18T10:39:19.410 に答える