Добавление простого UIView из класса в основной ViewController - PullRequest
0 голосов
/ 18 августа 2010

Уважаемые ученые, гуру кода.

Мой вопрос довольно прост, я уже некоторое время безуспешно искал и пытался, я был бы очень признателен за небольшую помощь.

Iиметь простой класс, который должен генерировать представление следующим образом:

//  vipcardclass.h

//

#import <UIKit/UIKit.h>


@interface vipcardclass : UIViewController {

}
+(IBAction)newsletter;
@end

и

//  vipcardclass.m

#import "vipcardclass.h"


@implementation vipcardclass



+(IBAction)newsletter{


    UIView *vipcard = [[UIView alloc] initWithFrame:CGRectMake(10.0, 0.0, 290.0, 280.0)];
    UIImageView *vipcardBG = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"vip_card.png"]]; //background.png
    [vipcard addSubview:vipcardBG];     



    CGRect webFrame = CGRectMake(6.0, 0.0, 300.0, 210.0); 
    UIWebView *content = [[UIWebView alloc] initWithFrame:webFrame]; 
    [content setBackgroundColor:[UIColor clearColor]];
    [content setOpaque:NO];
    NSString *urlAddress = @"http://www.google.com";
    NSURL *url = [NSURL URLWithString:urlAddress];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
    [content loadRequest:requestObj]; 
    [vipcard addSubview:content]; 
    [content release]; 

    [???????? addSubview:vipcard];
    NSLog(@"Newsletter was called");




}
@end

(Пожалуйста, посмотрите на ??????, несколько строк выше, если это былоконтроллер основного представления Я бы использовал self.view addSubview:, мой вопрос в том, каков правильный синтаксис при использовании его из класса)

В моем контроллере основного представления я #import "vipcardclass.h"

и в какой-то момент вызывая функцию класса [vipcardclass newsletter];

, которая прекрасно работает, кроме добавления ее в основной контроллер.Я хотел бы добавить в качестве примечания, что функциональность класса не связана с какой-либо функцией в контроллере основного представления и не имеет отношения к ней, это что-то вроде запуска и забывания, и я просто хочу открыть и отобразить это представление.

СпасибоВы любезно.

1 Ответ

0 голосов
/ 18 августа 2010

Попробуйте:

//  vipcardclass.m

#import "vipcardclass.h"


@implementation vipcardclass



+ (UIView*) newsletter {


    UIView *vipcard = [[UIView alloc] initWithFrame:CGRectMake(10.0, 0.0, 290.0, 280.0)];
    UIImageView *vipcardBG = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"vip_card.png"]]; //background.png
    [vipcard addSubview:vipcardBG];     
    [vipcardBG release];


    CGRect webFrame = CGRectMake(6.0, 0.0, 300.0, 210.0); 
    UIWebView *content = [[UIWebView alloc] initWithFrame:webFrame]; 
    [content setBackgroundColor:[UIColor clearColor]];
    [content setOpaque:NO];
    NSString *urlAddress = @"http://www.google.com";
    NSURL *url = [NSURL URLWithString:urlAddress];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
    [content loadRequest:requestObj]; 
    [vipcard addSubview:content]; 
    [content release]; 

    NSLog(@"Newsletter was called");

    return [vipcard retain];



}
@end

А в главном контроллере вида:

- (IBAction) loadNewsletter
{
    UIView *vipcard = [vipcardclass newsletter];
    [self.view addSubview:vipcard];
    [vipcard release];

}

Кроме того, вы можете захотеть создать подкласс UIView и включить весь код newsletter в метод init:

@interface vipcardclass : UIView {

}
@end

@implementation vipcardclass

 - (id) init {
    self = [super init];
    if (self != nil) {

        UIImageView *vipcardBG =[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"vip_card.png"]];
   //background.png
       [self addSubview:vipcardBG];     
       [vipcardBG release];


       CGRect webFrame = CGRectMake(6.0, 0.0, 300.0, 210.0); 
       UIWebView *content = [[UIWebView alloc] initWithFrame:webFrame]; 
       [content setBackgroundColor:[UIColor
   clearColor]];
       [content setOpaque:NO];
       NSString *urlAddress = @"http://www.google.com";
       NSURL *url = [NSURL URLWithString:urlAddress];
       NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; 
       [content loadRequest:requestObj]; 
       [self addSubview:content]; 
       [content release]; 

       NSLog(@"Newsletter was called");
    }
    return self;
}

@end

А в главном контроллере вида:

- (IBAction) loadNewsletter
{
    UIView *vipcard = [[vipcardclass alloc] init];
    [self.view addSubview:vipcard];
    [vipcard release];

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...