当我在tableview中点击一行时,关闭popover

Rav*_*avi 2 iphone objective-c uipopovercontroller ios xcode4

我正在使用Popover控制器,我在单击按钮时创建一个弹出控件,然后导航到类,在弹出类中显示一个表视图.

在这里,我想在点击表格视图行时忽略弹出窗口.

这是我的代码:

//popoverclass.h
UIPopoverController *popover; 
@property(nonatomic,retain)IBOutlet UIPopoverController *popover;

//popoverclass.m
-(IBAction)ClickNext
{
    ClassPopDismiss *classCourse = [[ClassPopDismiss alloc] init];
    popover = [[UIPopoverController alloc] initWithContentViewController:classCourse];
    popover.delegate = self;
    [popover presentPopoverFromRect:CGRectMake(50,-40, 200, 300) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
    [classCourse release];

}

//ClassPopDismiss.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    PopOverClass *objclass=[[PopOverClass alloc]init];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
  [objclass.popover dismissPopoverAnimated:YES];

}
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用.

iNo*_*oob 9

从同一个类中删除popover是不可能的,因为popover是从类中呈现的,popoverclass.m而你的表是在ClassPopDismiss.m.

因此,最好的选择是在您的自定义委托方法ClassPopDismiss.h:

// ClassPopDismiss.h
@protocol DismissDelegate <NSObject>

-(void)didTap;

@end
Run Code Online (Sandbox Code Playgroud)

id <DismissDelegate> delegate;在您的@interface部分中设置一个.

打电话didTap告诉PopOverClass那个tableView被窃听.

// ClassPopDismiss.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath  {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    [delegate didTap];
}
Run Code Online (Sandbox Code Playgroud)

在你的popoverclass.h:

@interface PopOverClass : UIViewController <DismissDelegate>
Run Code Online (Sandbox Code Playgroud)

在你的popoverclass.m,不要忘记委托给self.喜欢:

ClassPopDismiss *classpop = [[ClassPopDismiss alloc]init];
classpop.delegate=self;
Run Code Online (Sandbox Code Playgroud)

在使用协议方法时:

-(void)didTap
{
    //Dismiss your popover here;
    [popover dismissPopoverAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)