1

我想在呈现 modalView 时将父视图中的数据(字符串数组)加载到子视图中的一组 UITextField 中。

我知道如何从孩子传给父母,而且我敢肯定,走另一条路更容易,但我不知道如何。

更新:更新被删除,因为我发现了问题(模态视图的双重释放)

4

4 回答 4

2

覆盖子视图控制器的 init 方法。

- (id) initWithStrings:(NSArray *)string {
    if (self = [super init]) {
        // Do stuff....
    }
    return self;
}

然后在父母中:

MyChildViewController *vc = [[[MyChildViewController alloc] initWithStrings: strings] autorelease];
于 2010-08-10T06:38:23.087 回答
0

有两种方法可以做到:

1.按照马特的建议覆盖init方法

2.在您的子类中创建字段并将这些值传递给您的文本字段。

@interface ChildViewController : UIViewController{
    NSArray *strings;
    UITextfield *textField1;
    UITextfield *textField2;
}
...

- (void)viewDidLoad {
    [super viewDidLoad];
    textField1.text = [strings objectAtIndex:0];
    textField2.text = [strings objectAtIndex:1];
}

然后在父类中:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    ChildViewController *childController = [[ChildViewController alloc] init];
    childController.strings = your_array_of_strings;
    [self.navigationController pushViewController:childController animated:YES];
    [childController release];

}
于 2010-08-10T07:47:46.397 回答
0
- (id)initWithDataObject:(YourDataObjectClass *)dataObject {
    if (self = [super init]) {
        self.dataObject = dataObject;
        // now you can do stuff like: self.myString = self.dataObject.someString;
        // you could do stuff like that here or if it is related to view-stuff in viewDidLoad
    }
    return self;
}
于 2010-08-10T07:59:12.517 回答
0

如果你想变得非常花哨,你可以为你的孩子视图做一个代表。

@protocol MyChildViewDelegate
- (NSArray*)getStringsForMyChildView:(MyChildView*)childView;
@end

@interface MyChildView : UIView
{
    id <MyChildViewDelegate> delegate;
    ...
}

@property (nonatomic, assign) id <MyChildViewDelegate> delegate;
...
@end

然后在您视图的某个地方,您会要求提供字符串:

- (void)viewDidLoad
{
    ...
    NSArray* strings = [delegate getStringsForMyChildView:self];
    ...
}

然后在您的控制器(或任何地方)中,您可以执行以下操作:

myChildView = [[MyChildView alloc] initWith....];
myChildView.delegate = self;

...

- (NSArray*)getStringsForMyChildView:(MyChildView*)childView
{
    return [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
}

在这种情况下,这可能有点矫枉过正,但这也是 UITableViews 的做法:它们有一个数据源委托来为它们提供内容。

于 2010-08-10T08:11:04.187 回答