从Popover中显示的TableView中的单元格填充textField

时间:2011-05-18 17:06:42

标签: ipad uitableview uipopovercontroller

在View Controller中,我有一个按钮,可以创建一个包含TableView的popOverCOntroller。当用户从该tableView中选择一些内容时,我希望ViewController中的TextField使用tableView和popOverCOntroller中的文本进行填充,以解除显示ViewController的问题。

popOverCOntroller,ViewController,TableView代码都可以正常工作。我无法弄清楚如何将文本恢复到原始的ViewController。

谢谢,我知道这是抽象的。有人能告诉我我错过的步骤吗?

埃里克

1 个答案:

答案 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];
}