OO在OBJ-C中查看控制器类的方法



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

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

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

谢谢,

刘易斯。

您可以创建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];

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

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

等。

最新更新