【问题标题】:Hide UIPopover after selecting row选择行后隐藏 UIPopover
【发布时间】:2012-07-05 20:35:21
【问题描述】:

我是 iPad 开发人员的新手,

我在我的应用程序中使用UIPopover,当我选择弹出框中的任何行时,我的弹出框并没有隐藏它仍然在视图中,当我触摸屏幕上的任意位置时它会隐藏。

我想在用户选择任何行后隐藏弹出框。

这是我的代码 sn-p,

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath
{
    for(int index=0;index<=indexPath.row;index++)
    {
        UITableViewCell *cell =[tableView cellForRowAtIndexPath:indexPath];
        lbl.text=cell.textLabel.text;
    }
}

逻辑:当我选择弹出框的任何一行时,相应的文本将被提取并存储到标签中。

我们将不胜感激。

编辑

UIViewController* popoverContent = [[UIViewController alloc]init];
UIView* popoverView = [[UIView alloc] initWithFrame:CGRectMake(110, 0, 500, 4)];

popoverPolicyNameTable = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, 250, 200) style:UITableViewStylePlain];// size of tableview inside popover

[popoverPolicyNameTable setDelegate:(id<UITableViewDelegate>)self]; 
[popoverPolicyNameTable setDataSource:(id<UITableViewDataSource>)self]; 
[self.view addSubview:popoverPolicyNameTable];
[popoverPolicyNameTable release];

[popoverView addSubview:popoverPolicyNameTable];
popoverContent.view = popoverView;
popoverContent.contentSizeForViewInPopover = CGSizeMake(250, 200); //size of popover border
self.popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent];

[self.popoverController  presentPopoverFromRect:CGRectMake(350,100, 35, 35) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; //size of arrow

[popoverContent release];
[popoverView release];

【问题讨论】:

  • 您必须在弹出框内添加一个带有 Table 的 UIView 对吧?
  • @mehul:当我写[myPopoverController dismissPopoverAnimated:YES];时,我的应用程序崩溃了

标签: iphone ipad uitableview hide uipopovercontroller


【解决方案1】:

你需要实现这样的东西

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController1{

    [self.popoverController dismissPopoverAnimated:YES];
    self.popoverController=nil;

}

【讨论】:

  • 您的代码中的popOverClass 是什么?我在那里遇到错误。
  • popoverclass 是您在其中定义了弹出框的自我类。
  • 现在你可以按原样使用它。我已经为你编辑了它。Confirmsheet 只是一个条件,如果弹出框不为零,那么接下来应该执行什么。
  • 没有效果,在我的问题中我告诉过你我想在用户选择任何行时隐藏弹出窗口。什么时候调用这个方法?我一直在调试该方法,但没有调用该方法。
  • 你设置了uipopover的代理吗?
【解决方案2】:

在具有UITableView 的类中添加一个变量:

id parent;

然后属性并合成它:

@property(nonatomic, retain) id parent;

@synthesize parent;

然后你在哪里创建这个ViewController 的对象来添加Popovercontroller,这样做

myTableViewController.parent = myPopoverControllerObject;

现在在didSelectRowAtIndexPath:

[parent dismissPopoverAnimated:YES];

你已经完成了!!!

【讨论】:

  • 我写道:popoverPolicyNameTable.parent = popoverController;,popoverPolicyNameTable 是 tableview 的名称,popoverController 是 UIpopoverController 的名称。写完后我收到错误,找不到属性
  • 在 UITableview 类型的对象上找不到属性父项
  • 在问题中查看我的编辑,它显示了我如何创建 UIPopover。
【解决方案3】:

使用委托并通知您的委托,用户选择了列表中的项目。委托将知道如何关闭视图控制器。

这种方法更好,因为它与容器无关,您可以在弹出框之外重用视图控制器:例如,在 iPhone 上使用导航控制器

【讨论】:

    【解决方案4】:

    将 Popover 控制器设为类成员变量。

    然后点击表格视图点击方法调用popovercontoller的dismiss方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多