1

modalView を表示するときに、親ビューから子ビューの一連の UITextFields にデータ (文字列の配列) をロードしたいと考えています。

私は子から親への受け渡し方法を知っています。また、逆の方が簡単だと確信していますが、方法がわかりません。

更新: 問題を発見したため更新を削除しました (モーダル ビューの二重解放)

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

あなたがそれを行うことができる2つの方法:

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 に答える