私はiOSの世界に不慣れで、値をTableViewからホームコントローラーに戻そうとしているときに問題に遭遇しました。
私が取り組んでいるシナリオは
- ホームコントローラーにはボタンがあります
- ボタンをクリックすると、2 番目の UIViewController の項目のリストが開きます
- ユーザーがリストからアイテムを選択する
- 選択した項目がホーム コントローラーの別のリストに追加されます
この問題についての指針を本当に感謝します:
これが私がホームでセグエを準備している方法です
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
UIViewController *destination = segue.destinationViewController;
if ([destination respondsToSelector:@selector(setDelegate:)]) {
[destination setValue:self forKey:@"delegate"];
}
}
SecondController にはデリゲート ID があるため、デリゲートがrespondsToSelector
" setDelegate" に対して true を返すように設定されていると想定しています。
次に、SecondController で、ユーザーが項目を選択すると、didSelectRowAtIndexPath
&viewWillDisappear
メソッドを呼び出して項目を設定し、ビューを非表示にします。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
POSAllItemsCell *cell = (POSAllItemsCell *) [tableView cellForRowAtIndexPath:indexPath];
item = [NSDictionary dictionaryWithObjectsAndKeys:cell.name, @"Name", cell.price, @"Price", cell.code, @"Code", nil];
[self dismissViewControllerAnimated:YES completion:NULL];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if ([delegate respondsToSelector:@selector(setSelection:)]) {
[delegate setValue:item forKey:@"selection"];
}
}
ここでの問題は、HomeController に setSelection メソッドがあるにもかかわらず、 respondsToSelector
forが false を返すことです。setSelection
- (void) setSelection:(NSDictionary *)dict {
if (![dict isEqual:selection]) {
......
}
}
私の質問が明確でないか、適切にフォーマットされていない場合は、事前にお詫び申し上げます。ところで、これは Xcode 4.2 を搭載した iOS 5 用です。