0

我在我的应用程序的滑块控件中内置了 10 个不同的页面,这些页面是使用故事板设置的。

每个页面的唯一区别是使用不同的 Web 视图来显示富文本,并使用不同的图像作为背景。

我是否可以为所有 10 个页面设置一个视图控制器,并在构造函数中设置一些标志,这些标志将在每个页面加载时执行,以告诉它要显示什么图像和 Web 视图?如果是这样,这会是什么样子?

谢谢,

刘易斯。

4

2 回答 2

1

我认为最好的方法是为您的视图控制器定义一个数据源。该数据源将具有以下接口,例如:

@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;

然后,您的视图控制器会在需要时向数据源询问 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 回答
1

您可以创建 UIViewController 的子类,例如 MyViewController。然后将您的 .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 回答