在View Controller中,我有一个按钮,可以创建一个包含TableView的popOverCOntroller。当用户从该tableView中选择一些内容时,我希望ViewController中的TextField使用tableView和popOverCOntroller中的文本进行填充,以解除显示ViewController的问题。
popOverCOntroller,ViewController,TableView代码都可以正常工作。我无法弄清楚如何将文本恢复到原始的ViewController。
谢谢,我知道这是抽象的。有人能告诉我我错过的步骤吗?
埃里克
答案 0 :(得分:1)
您可以考虑通过TableViewController的自定义init方法将引用传递给text字段或可变字符串。
如果选择传递文本字段,则可以在用户选择行时直接指定值并关闭弹出视图。如果传递可变字符串,则可以设置其值,稍后在popover的委托方法中设置文本字段的值。
如果您需要一些代码,请告诉我。
修改强>
@interface DataViewController : UITableViewController {
UIPopoverController *popOverController;
UILabel *labelToUpdate;
}
@property (nonatomic, assign) UIPopoverController *popOverController;
@property (nonatomic, retain) UILabel *labelToUpdate;
@end
如果需要以编程方式关闭它,则需要存储对UIPopOverController的弱引用。 labelToUpdate
是我们要更新的标签。
@implementation DataViewController
@synthesize popOverController;
@synthesize labelToUpdate;
- (void)dealloc
{
[labelToUpdate release];
[super dealloc];
}
....
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
...
self.labelToUpdate.text = event.title;
[self.popOverController dismissPopoverAnimated:YES];
}
@end
在UIPopOverController委托中,它将是父视图控制器,执行此操作 -
// method trigged by button press
- (IBAction)showChoice {
DataViewController *viewController = [[DataViewController alloc] initWithNibName:nil bundle:nil];
UIPopoverController *popOverController = [[UIPopoverController alloc] initWithContentViewController:viewController];
popOverController.delegate = self;
viewController.labelToUpdate = self.outputLabel;
viewController.popOverController = popOverController;
[popOverController presentPopoverFromRect:self.button.frame
inView:self.window // Since I did this of the application delegate
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController {
[popoverController release];
}