modalView を表示するときに、親ビューから子ビューの一連の UITextFields にデータ (文字列の配列) をロードしたいと考えています。
私は子から親への受け渡し方法を知っています。また、逆の方が簡単だと確信していますが、方法がわかりません。
更新: 問題を発見したため更新を削除しました (モーダル ビューの二重解放)
modalView を表示するときに、親ビューから子ビューの一連の UITextFields にデータ (文字列の配列) をロードしたいと考えています。
私は子から親への受け渡し方法を知っています。また、逆の方が簡単だと確信していますが、方法がわかりません。
更新: 問題を発見したため更新を削除しました (モーダル ビューの二重解放)
子ビュー コントローラーの init メソッドをオーバーライドします。
- (id) initWithStrings:(NSArray *)string {
if (self = [super init]) {
// Do stuff....
}
return self;
}
次に、親で:
MyChildViewController *vc = [[[MyChildViewController alloc] initWithStrings: strings] autorelease];
あなたがそれを行うことができる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];
}
- (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;
}
本当に凝りたい場合は、子ビューのデリゲートを作成できます。
@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 も同じように行う方法です。コンテンツを提供するためのデータ ソース デリゲートがあります。