1

我正在为 SOAP Web 服务使用以下包装器:http: //www.sudzc.com/ 以及用于活动指示符的以下 MBProgressHUD:https ://github.com/jdg/MBProgressHUD

不知道如何在视图调用之前使用 MBProgressHUD。我还使用了调用 SOAP 服务的数据控制器。

这是我的代码。

产品数据控制器.h

#import <Foundation/Foundation.h>
@class ProsoftProducto;

@interface ProductoDataController : NSObject

@property (nonatomic, copy) NSMutableArray *listaProductos;

- (NSUInteger)countOfListaProductos;
- (ProsoftProducto *)objectInListaProductosAtIndex:(NSUInteger)index;
- (void) agregarProductoWithNombre:(NSString *)pnombre 
                      descripcion:(NSString *)pdescripcion
                              url:(NSString *)purl;

@end

产品数据控制器.m

#import "ProductoDataController.h"
#import "ProsoftProducto.h"

#import "ProsoftWS_PuenteAplicacionesMobiles.h"

@interface ProductoDataController()
- (void)inicializarDefaultLista;
@end

@implementation ProductoDataController

@synthesize listaProductos = _listaProductos;

- (void)inicializarDefaultLista
{
    ProsoftWS_PuenteAplicacionesMobiles* service = [ProsoftWS_PuenteAplicacionesMobiles service];
    service.logging = YES;
    // service.username = @"username";
    // service.password = @"password";

    // Returns NSMutableArray*. 
    [service listaProductosActivos:self action:@selector(listaProductosActivosHandler:) detail: [NSMutableArray array]];
}

// Handle the response from listaProductosActivos.

- (void) listaProductosActivosHandler: (id) value {

    // Handle errors
    if([value isKindOfClass:[NSError class]]) {
        NSLog(@"%@", value);
        return;
    }

    // Handle faults
    if([value isKindOfClass:[SoapFault class]]) {
        NSLog(@"%@", value);
        return;
    }               


    // Do something with the NSMutableArray* result
    self.listaProductos = (NSMutableArray*)value;
    //NSLog(@"----- * LISTA PRODUCTOS ACTIVOS * -----");
}

- (void)setListaProductos:(NSMutableArray *)lista
{
    if(_listaProductos != lista)
        _listaProductos = [lista mutableCopy];
}

- (id)init 
{
    if(self = [super init])
    {
        [self inicializarDefaultLista];
        return self;
    }
    return nil;
}

- (NSUInteger)countOfListaProductos
{
    return [self.listaProductos count];
}

- (ProsoftProducto *)objectInListaProductosAtIndex:(NSUInteger)index
{
    return [self.listaProductos objectAtIndex:index];
}

- (void) agregarProductoWithNombre:(NSString *)pnombre descripcion:(NSString *)pdescripcion
                               url:(NSString *)purl
{
    ProsoftProducto *producto;
    producto = [[ProsoftProducto alloc]initWithNombre:pnombre 
                                   descripcion:pdescripcion 
                                           url:purl];
    [self.listaProductos addObject:producto];
}

@end

ProductoViewController.h

#import <UIKit/UIKit.h>
@class ProductoDataController;
@class MBProgressHUD;

@interface ProductoViewController : UITableViewController{
    MBProgressHUD *HUD;
    NSMutableArray *_objects;
}

@property (nonatomic, strong) ProductoDataController *dataControllerProductos;

@end

ProductoViewController.m

#import "ProductoViewController.h"
#import "ProductoDetalleViewController.h"
#import "ProductoDataController.h"
#import "ProsoftProducto.h"
/*
@interface ProductoViewController ()
    NSMutableArray *_objects;
@end
*/
@implementation ProductoViewController

@synthesize dataControllerProductos = _dataControllerProductos;

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark - Segue
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"PushProductoDetalle"]) {
        ProductoDetalleViewController *detalleProductoViewController = [segue destinationViewController];
        detalleProductoViewController.producto = [self.dataControllerProductos objectInListaProductosAtIndex:[self.tableView indexPathForSelectedRow].row];
    }
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.dataControllerProductos countOfListaProductos];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"ProductoCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    ProsoftProducto *producto = [self.dataControllerProductos objectInListaProductosAtIndex:indexPath.row];
    cell.textLabel.text = producto.nombre;
    return cell;
}

// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Return NO if you do not want the specified item to be editable.
    return NO;
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.
    /*
     <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     */
}

@end

ProductoDetelleViewController.h

#import <UIKit/UIKit.h>
@class ProsoftProducto;

@interface ProductoDetalleViewController : UIViewController

@property (strong, nonatomic) ProsoftProducto *producto;
@property (strong, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UILabel *lblTitulo;
@property (weak, nonatomic) IBOutlet UILabel *lblDescripcion;
@property (weak, nonatomic) IBOutlet UIImageView *imgUrl;

@end

ProductoDetelleViewController.m

#import "ProductoDetalleViewController.h"
#import "ProsoftProducto.h"

@interface ProductoDetalleViewController ()

@end

@implementation ProductoDetalleViewController

@synthesize producto = _producto;
@synthesize scrollView = _scrollView;
@synthesize lblTitulo = _lblTitulo;
@synthesize lblDescripcion = _lblDescripcion;
@synthesize imgUrl = _imgUrl;

- (void)setProducto:(ProsoftProducto *)pproducto
{
    if(_producto != pproducto)
    {
        _producto = pproducto;
        [self configurarView];
    }
}

- (void)configurarView
{
    ProsoftProducto *objProducto = self.producto;

    if(objProducto) 
    {
        self.lblTitulo.text = objProducto.nombre;
        self.lblDescripcion.text = objProducto.descripcion;

        CGSize maximumLabelSize = CGSizeMake(310,9999);
        CGSize expectedLabelSize = [objProducto.descripcion sizeWithFont:_lblDescripcion.font 
                                                      constrainedToSize:maximumLabelSize 
                                                          lineBreakMode:_lblDescripcion.lineBreakMode]; 
        CGRect newFrame = _lblDescripcion.frame;
        newFrame.size.height = expectedLabelSize.height;
        _lblDescripcion.frame = newFrame;

        if(objProducto.urlImagen.length > 0){
            self.imgUrl.image = [UIImage imageNamed:@"ic_offline.png"];
            NSURL *url = [NSURL URLWithString:objProducto.urlImagen];
            UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];
            self.imgUrl.image = image;
        } else {
            _lblDescripcion.frame = CGRectMake(5, 40, 310, expectedLabelSize.height);
        }
    }
}


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [self configurarView];
    NSUInteger height = 0;
    CGSize maximumLabelSize = CGSizeMake(310,9999);
    CGSize expectedLabelSize = [_producto.descripcion sizeWithFont:_lblDescripcion.font 
                                                constrainedToSize:maximumLabelSize 
                                                    lineBreakMode:_lblDescripcion.lineBreakMode];

    if(_producto.urlImagen.length > 0)
        height = expectedLabelSize.height + 260;
    else
        height = expectedLabelSize.height + 40;

    _scrollView.frame = (CGRect){_scrollView.frame.origin, CGSizeMake(320, 420)};
    _scrollView.contentSize = CGSizeMake(320, height);
    _scrollView.backgroundColor = [UIColor whiteColor]; 
    [super viewDidLoad];
}

- (void)viewDidUnload
{
    self.producto = nil;
    [super viewDidUnload];
}

@end

我的应用程序代表的代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{   
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
    UINavigationController *navigatorController = [[tabBarController viewControllers] objectAtIndex:0];

    // Solicitar Informacion
    // Solicitar Informacion

    // Productos
    navigatorController = [[tabBarController viewControllers] objectAtIndex:1];
    ProductoViewController *productoViewController = [[navigatorController viewControllers] objectAtIndex:0];

    productoViewController.dataControllerProductos = [[ProductoDataController alloc]init];
    // Productos

    // Noticias
    navigatorController = [[tabBarController viewControllers] objectAtIndex:2];
    NoticiaViewController *noticiaViewController = [[navigatorController viewControllers] objectAtIndex:0];

    noticiaViewController.dataControllerNoticias = [[NoticiaDataController alloc]init];
    // Noticias

    // Sucursales
    navigatorController = [[tabBarController viewControllers] objectAtIndex:3];
    SucursalViewController *sucursalViewController = [[navigatorController viewControllers] objectAtIndex:0];

    sucursalViewController.dataControllerSucursal = [[SucursalDataController alloc]init];
    // Sucursales

    // Coopenae Virtual
    navigatorController = [[tabBarController viewControllers]objectAtIndex:5];
    InfoGeneralViewController *infoGeneralViewController = [[navigatorController viewControllers]objectAtIndex:0];
    infoGeneralViewController.dataControllerInfoGeneral = [[InfoGeneralDataController alloc]init];
    // Coopenae Virtual

    // InfoGeneral
    // InfoGeneral

    return YES;

}

任何人都可以帮助我理解MBProgressHUD,我需要知道我是否必须调用它。谢谢

4

0 回答 0