我的应用程序中的滑块控件中内置了10个不同的页面,这些页面是使用故事板设置的。
每个页面的唯一区别是使用不同的Web视图来显示富文本,并使用不同的图像作为背景。
我是否可以为所有10个页面设置一个视图控制器,并在构造函数中设置一些标志,这些标志在加载时会在每个页面上执行,以告诉它显示什么图像和Web视图?如果是这样的话会是什么样的?
谢谢,
路易斯。
答案 0 :(得分: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];
}
等
答案 1 :(得分: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];