通过单击从程序创建的弹出窗口中的UIButton来关闭弹出窗口

时间:2014-02-24 09:43:21

标签: ios storyboard popover pass-data

我在tableViewCell中有一个执行

的UIButton
-(IBAction)buttonClicked:(id)sender{

UIStoryboard *SB = [UIStoryboard storyboardWithName:@"ABC" bundle:nil];
UIViewController *VC = [SB instantiateViewControllerWithIdentifier:@"someID"];

popoverController  = [[UIPopoverController alloc] initWithContentViewController:VC];
[popoverController setDelegate:self];

..............................

[popoverController presentPopoverFromRect:rect
                                       inView:self.view
                     permittedArrowDirections:UIPopoverArrowDirectionRight
                                     animated:YES];
}

弹出一个由UITextField和UIButton组成的控制器。现在我要通过单击UIButton从弹出控制器传回UITextField中的字符串?

2 个答案:

答案 0 :(得分:0)

将此视图控制器保留在.h

UIViewController *VC;

更改此

UIViewController *VC = [SB instantiateViewControllerWithIdentifier:@"someID"];

self.VC = [SB instantiateViewControllerWithIdentifier:@"someID"];

当.h对象从内存中销毁时,它将从内存中释放。

当您关闭弹出框时,仍然存在最后一个弹出框,您可以像

一样进行访问
VC.yourTextField.text

当你再次出现在popover上时,请确保通过设置@“”将文本字段清空为空。

答案 1 :(得分:0)

如果您在自定义TableViewCell中使用TableView,则可以在按下按钮时在TableViewCell类中创建一个方法:

CustomTableViewCell.h

@interface CustomTableViewCell : UITableViewCell

@property (nonatomic, strong) IBOutlet UIButton *cellButton;
@property (nonatomic, strong) IBOutlet UITextField *cellTextField;

- (NSString*)getText;

@end

CustomTableViewCell.m

- (NSString*)getText {

    return self.cellTextField.text;
}

在CustomTableView类中:

CustomTableView.m

在CustomTableView的委托方法中将self设置为CustomTableViewCell的委托

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    CustomTableViewCell *cellCustom = [tableView dequeueReusableCellWithIdentifier:@"CustomTableViewCell"];
    ...
    [cellCustom.cellButton setTag:indexPath.row];
    ...
    return cell;
}

最后在你的按钮的IBAction方法中:

- (IBAction)pushButton:(id)sender{

    UIButton *btn = (UIButton*)sender;

    CustomTableViewCell *cellSelected = (CustomTableViewCell *)[self.tableView cellForRowAtIndexPath:btn.tag];

    NSString *strWritten = [cellSelected getText];

    NSLog(@"Text written: %@", strWritten);
}