我是 iOS 世界的新手,在尝试将值从 TableView 传递回主控制器时遇到了问题。
我正在处理的场景是
- 家庭控制器有一个按钮
- 单击按钮打开第二个 UIViewController 中的项目列表
- 用户从列表中选择一个项目
- 所选项目被添加到家庭控制器上的另一个列表中
非常感谢有关此问题的任何指示:
这就是我为 Segue on Home 做准备的方式
- (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