2013-05-10 43 views
3

我已经实现了UIPopoverController with storyboard,但是当我选择UITableView中的特定行时,我无法解除它。 enter image description here关闭didSelectRowAtIndexPath上的UIPopoverController

当选择特定的行,以便时间我想解雇popover,但我不能解雇它。

我下面写的代码如下:

//显示在主UIViewController中的酥料饼

-(IBAction)clickNotes:(id)sender { 
    NSLog(@"notes:"); 
    NoteList *objNoteList = [[NoteList alloc] initWithNibName:@"NoteList" bundle:nil]; 
    popover.delegate = self; 
    popover = [[UIPopoverController alloc] initWithContentViewController:objNoteList]; 
    popover.popoverContentSize = CGSizeMake(250, 450); 
    [popover presentPopoverFromRect:CGRectMake(730, 0, 1,1) inView:self.view  permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
    } 

//隐藏在另一个UIViewController中的酥料饼上didSelecteRowAtIndexPath

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    {  
    Notepad_ipad *objNote = [[Notepad_ipad alloc] init];  
    NSString *mSelectedNoteText = @"Selected text"; 
    [objNote SelectedNote:mSelectedNoteText]; 
    [objNote.popover dismissPopoverAnimated:YES]; 
    } 

回答

0

使用

[popover dismissPopoverAnimated:YES]; 
0

以下代码实例化一个新实例。因此,无关与现有酥料饼:Notepad_ipad *objNote = [[Notepad_ipad alloc] init];

也代替:

popover.delegate = self; 
popover = [[UIPopoverController alloc] initWithContentViewController:objNoteList]; 

用途:

popover = [[UIPopoverController alloc] initWithContentViewController:objNoteList]; 
popover.delegate = self; 

即:首先分配的实例,然后设置其delegate

最后用这个代替你的方法 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *) indexPath {  
[popover dismissPopoverAnimated:YES]; 
} 
0

//创建控制器的.h文件中协议包含didSelectRowAtIndexPath方法如下:

@protocol Popoverdelegate <NSObject> 
{ 

    -(void)didRowAtIndexPathIsSelected; 

} 


// Add this property in .h file of the same controller 

@property (strong, nonatomic) id<Popoverdelegate> delegate; 


// Now implement this protocol in interface which calls popovercontroller 

// for ex: @interface ViewController <Popovercontroller> 

// then add following properties to viewController .h file 

@protocol (strong, nonatomic) UIPopoverController *popoverController; 


// Implement popoverdelegate protocol in .m file as 

- (void) didRowAtIndexPathIsSelected 
{ 

    [self.popoverController dismissPopoverAnimated:YES]; 

} 


// Replace your code as follows 


-(IBAction)clickNotes:(id)sender 
{ 

    NoteList *objNoteList = [[NoteList alloc] initWithNibName:@"NoteList" bundle:nil]; 
    popover = [[UIPopoverController alloc] initWithContentViewController:objNoteList]; 
    popover.delegate = self; 
    self.popoverController = popover; 

    self.popoverController.popoverContentSize = CGSizeMake(250, 450); 
    [self.popoverController presentPopoverFromRect:CGRectMake(730, 0, 1,1) inView:self.view  permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
    } 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{  
    Notepad_ipad *objNote = [[Notepad_ipad alloc] init];  
    NSString *mSelectedNoteText = @"Selected text"; 
    [objNote SelectedNote:mSelectedNoteText]; 
    [self.delegate dismissPopoverAnimated:YES]; 

} 
0

最聪明这里要做的事情(imho)是遵循这个示例代码,我每次都这样做:

// firstViewController.h 
@interface firstViewController : UIViewController <SecondDelegate> 
{ 
    SecondViewController *choice; 
} 

// firstViewController.m 
- (void)choicePicked(NSString *)choice 
{ 
    NSLog(choice); 
    [_popover dismissPopoverAnimated:YES]; //(put it here) 
    _popover = nil; (deallocate the popover) 
    _choicePicker = nil; (deallocate the SecondViewController instance) 
} 

// secondViewController.h (the one that will give back the data) 
@protocol SecondDelegate <NSObject> 
- (void)choicePicked:(NSString *)choice; 
@end 
@interface secondViewController : UITableViewController 
@property (nonatomic, assign) id <SecondDelegate> delegate; 
@end 

// secondViewController.m 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSString *selection = [_yourArray objectAtIndex:indexPath.row]; 
    [[self delegate] choicePicked:selection]; 
}