2

我正在创建一个视图控制器的实例,然后以模态方式将其呈现在另一个视图上:

[viewController receiveNumber1:number1 andNumber2:number2];
[viewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self presentModalViewController:viewController animated:YES];

我想做的是在初始化时在这个新的视图控制器中设置两个属性。

我可以通过调用自定义方法来做到这一点(这里有些是 int 变量):

[viewController methodProperty1:something1 andProperty2:something2];

但是,我确实需要在初始化时正确设置这些属性,因为新视图的内容取决于这些数字。

有没有办法在初始化时将信息传递给新视图?就像是:

[[UIViewController alloc] initWithValue1:something1 andValue2:something2];

另外,我不明白为什么

CustomViewController *view = [[CustomViewController alloc] init];
view.property = newValue; / [view setProperty:newValue];

在此配置中不起作用,这意味着属性的值不会改变。我可以在新视图中调用方法并以这种方式设置其属性,但不能直接设置属性?

如果这些是蹩脚的问题,我很抱歉,但我是一个初学者。

非常感谢!

4

2 回答 2

3
  1. view.property = newValue并且[view setProperty:newValue]是等价的术语。
  2. 您可以为您的视图控制器实现一种或多种自定义初始化方法,没有什么可以停止这样做的。查看官方文档以确保您遵守有关如何实现自定义初始化程序的一些规则。

您的代码片段:

-(id)initWithValue1:(NSInteger)value1 andValue2:(NSInteger)value2
{
    if (self = [super init])
    {
        _firstValue = value1;
        _secondValue = value2;
        return self;
    }
    else return nil; // or handle the error
}
于 2012-12-30T23:23:53.603 回答
2

在您的CustomViewController.h中,定义您要设置的两个属性和一个初始化方法,例如:

@property (nonatomic, assign) NSInteger firstValue;
@property (nonatomic, assign) NSInteger secondValue;

-(id)initWithFirstValue:(NSInteger)value1 andSecondValue:(NSInteger)value2;

然后,在您的 中CustomViewController.m,实现您之前声明的方法:

-(id)initWithFirstValue:(NSInteger)value1 andSecondValue:(NSInteger)value2
{
    self = [super init];
    if (self)
    {
        // Supposing you haven't synthesized your property and you are using
        // latest Xcode build, instance variable are automatically created
        _firstValue = value1;
        _secondValue = value2;
    }
    return self;
}

最后,您可以使用这行代码分配您的控制器:

CustomViewController *controller = [[CustomViewController alloc] initWithFirstValue:value1ToSet andSecondValue:value2ToSet];

一些最终建议
当您实现自定义初始化方法时,您应该正确选择init必须调用的方法super
例如,self = [super initWithFrame:CGRectZero];如果我的控制器是 UIViewController 的子类,或者self = [super initWithStyle:UITableViewStylePlain];它是 UITableViewController 的子类,我更喜欢调用。
还有其他自定义 init 方法,但您可以找到有关自定义控制器超类的其他信息阅读文档。

于 2012-12-30T23:22:32.490 回答