ios – 将数据从FirstViewController传递到LastViewController

前端之家收集整理的这篇文章主要介绍了ios – 将数据从FirstViewController传递到LastViewController前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前的设计中有四个viewControllers,我正在设计一个销售产品的应用程序.

FirstViewController获取产品图像,当用户点击下一个按钮时,它将用户带到用户描述产品的secondviewcontroller,然后用户点击下一个按钮,该按钮将用户带到输入价格和条件的thirdViewcontroller.在lastviewcontolller中有一个post按钮,用于将产品信息发送到服务器.我正在使用POST方法.

以下segue方法不适合我想要的,因为它将firstviewcontroller对象(产品图像)发送到secondviewcontoller,然后secondviewcontroller也应该将产品图像转发到thirdviewcontoller,依此类推.我不认为这是一种可行的方法.

我想知道从第一页到最后一页收集信息的最佳方式是什么,然后发送.处理该问题的最佳方法是什么?我在viewcontrollers之间使用segue.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"isSecond"])
    {
        // Get reference to the destination view controller
        SecondViewController *vc = [segue destinationViewController];

        // Pass any objects to the view controller here,like...
        [vc setMyProductImage:productImage];
    }
}

解决方法

即使这里的大多数用户告诉你,也请不要使用单身人士.由于几个原因,它会违反 SOLID-Principles.

而只是将对象从ViewController传递给ViewController.

如果所有ViewController都期望相同的模型类,则可以创建具有模型属性的公共基类.

它可以有这种方法

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.destinationViewControler isKindOfClass:[ProductAwareBaseViewController class]])
    {
        ProductAwareBaseViewController *vc = (ProductAwareBaseViewController *)segue.destinationViewControler;
        vc.product = self.product;
    }
}

我创建了一个示例项目:https://github.com/vikingosegundo/ProductWizard

注意,所有视图控制器都派生自ProductAwareBaseViewController

@import UIKit;

@class Product;

@interface ProductAwareBaseViewController : UIViewController
@property (nonatomic,strong) Product *product;
@end
#import "ProductAwareBaseViewController.h"
#import "Product.h"

@interface ProductAwareBaseViewController ()

@end

@implementation ProductAwareBaseViewController

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.destinationViewController isKindOfClass:[ProductAwareBaseViewController class]]) {
        ProductAwareBaseViewController *vc = (ProductAwareBaseViewController *)segue.destinationViewController;
        vc.product = self.product;
    }
}
@end

此ViewController知道如何将类Product的模型数据传递给ProductAwareBaseViewController的其他实例及其子类.

所有其他视图控制器不处理传递数据,只是将每个数据部分(名称,描述,价格)添加到模型并显示它.

即:

#import "EditNameProductViewController.h"
#import "Product.h"

@interface EditNameProductViewController () 
@property (weak,nonatomic) IBOutlet UITextField *nameField;
@end

@implementation EditNameProductViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.product = [[Product alloc] init]; 
}

- (IBAction)continueTapped:(id)sender {
    self.product.productName = self.nameField.text; 
}

@end
#import "EditDescriptionProductViewController.h"
#import "Product.h"

@interface EditDescriptionProductViewController ()
@property (weak,nonatomic) IBOutlet UITextField *descriptionField;
@property (weak,nonatomic) IBOutlet UILabel *nameLabel;
@end

@implementation EditDescriptionProductViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.nameLabel.text = self.product.productName;
}

- (IBAction)continueTapped:(id)sender {
    self.product.productDescription = self.descriptionField.text;
}

@end

猜你在找的iOS相关文章