2013-05-10 41 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]; 
}